uni-app实现七牛云图片的云上传

  uni-app项目对于手机图片的存取通常有两种办法,其一是将图片资源放在服务器下单独开辟的资源文件夹中,然后通过获取图片在服务器的地址来加载图片。但是这种做法对服务器的带宽要求比较大,也会增加服务器的负载。由于我的云服务器性能不佳,采用这种方法会虽然能使图片加载,但是加载速度太慢,影响用户体验。


  要实现图片的快速上传和加载,我们可以用第二种办法,也就是利用云服务器的相关功能来实现,这里我选择七牛云。


  七牛云图片的上传过程需要后端和前端的相互配合,后端传给前端从七牛云获取的token,前端利用这个token验证身份后可以进行相关的上传操作。当然上传的过程可以完全交给后端,前端可以返回给后端你选择的图片转化后的base64编码,后端再进行上传工作。但由于图片的选择是前端的接口实现的,在前端进行上传操作会方便许多,也不需要将图片的格式进行转化就可以直接进行上传。故本博客上传图片利用前端进行。


  首先先实现后端获取token的接口。代码中accessKeysecretKey是七牛云提供给你的密匙,去你七牛云的账号当中粘贴即可。bucket指的是你在七牛云中创建的存储空间的名字。


public class QiNiu {

  private static String accessKey = ""; 
  private static String secretKey = "";  //七牛云提供的密匙
  private static String bucket = "";     //存储空间名

  /**
   * 获取上传凭证
   */
  public static String getUploadCredential() {
      Auth auth = Auth.create(accessKey, secretKey);
      String upToken = auth.uploadToken(bucket);
      System.out.println(upToken);
      return upToken;
  }
}

  这样接口就写完了,是不是很简单呢?现在后端只要写个servlet前端就可以调用了。

  String token = getUploadCredential();

  接下来写一下前端的操作,前端首先要向后台请求token,然后再请求七牛云的图片上传地址,将自己选择的图片上传即可。这里写一下手机端上选择相册中图片的代码。


uni.chooseImage({
	    count: 1, //默认9
	    sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
	    sourceType: ['camera','album'], //从相册选择
	    success: function (res) {						
			that.txUrl=res.tempFilePaths[0];
			var img = res.tempFilePaths[0];//imgurl 就是你的图片路径
          var key = Math.round(new Date() / 1000); //随机生成关键字
})
			

  上传成功后的图片会存在你的七牛云空间里面,但是在此之前,你得先为你的七牛云空间添加一个域名,作为图片存储的地址前缀url,然后自定义一个关键字key作为图片存储的地址后缀,上传成功后,url+key就是你的图片的存储地址。上传代码如下。


uni.request({
	url: '***/getToken.do',
	method: 'POST',
	data: {},
	header: { 'content-type': 'application/x-www-form-urlencoded'} ,
		success: (res) => {	
			let resData = res.data;
			let getToken = resData.token;

			uni.uploadFile({
			url: 'https://up.qbox.me',  //七牛云华东区上传地址
			filePath: img,              //图片在本地的地址
			name: 'file',
			formData: {
				key: key,               //图片存储地址后缀
				token: getToken         //后台传给前端的token
			},
			success: result => {
				let ImgUrl = '你的存储地址前缀url' + '/' + key;   //图片的存储地址
				//图片上传成功后的操作
			}
			})
		}
})

  到此为止,图片的上传就成功了,你就可以利用图片的存储地址进行对图片资源的加载了。