小程序上传图片到七牛云

                              小程序上传图片到七牛云

一、创建七牛云账号,获取ak、sk,创建对象存储空间名称

二、服务端接口获取七牛token值,个人使用的php编写的后端代码

1、小程序获取token接口调用,该方法我这里写在了utils文件夹里的util.js文件中,所以下文中上传图片引用的时候会用到对应的文件目录,该方法我在界面初始化监听的时候调用并写入了缓存方便后期使用,可根据自身需求更改token存储方式,代码如下:

  //获取七牛token
  function getQiniuloadToken() {
    var newurl=getApp().globalData.site_url + 'User.getQiniuToken';
    var data= {}
    this.requestpromise (newurl,'POST' ,data).then(res => {
      //服务器返回数据
      //console.log('success-七牛token----------:',res );
      //设置token信息缓存
      var qiniutoken=res.data.data.info[0]['token'];
      wx.setStorageSync('qiniutoken', qiniutoken);
      getApp().globalData.qiniutoken = qiniutoken;

    }).catch(res => {
        //异常
    }).finally(()=>{
        //结束
    })
  }
//模块化
module.exports = {
  getQiniuloadToken:getQiniuloadToken,
}

 2、服务端获取七牛token接口,相关的七牛信息都在配置文件中读取,需要引用七牛autoload.php文件,代码如下:

	/**
     * 获取七牛上传Token
     * @desc 用于获取七牛上传Token
     * @return int code 操作码,0表示成功
     * @return string msg 提示信息
     */
	public function getQiniuToken(){
	   	$rs = array('code' => 0, 'msg' => '', 'info' =>array());

	   	//获取后台配置的腾讯云存储信息
		$configpri=\App\getConfigPri();
		
		require_once API_ROOT.'/../sdk/qiniu/autoload.php';
		
		// 需要填写你的 Access Key 和 Secret Key
		$accessKey = $configpri['qiniu_accesskey'];
		
		$secretKey = $configpri['qiniu_secretkey'];
		$bucket = $configpri['qiniu_bucket'];
		$qiniu_domain_url = $configpri['qiniu_domain_url'];
		// 构建鉴权对象
		$auth = new \Qiniu\Auth($accessKey, $secretKey);
		// 生成上传 Token
		$token = $auth->uploadToken($bucket);
		$rs['info'][0]['token']=$token ; 
		return $rs; 
		
	}

三、小程序界面上传图片

1、wxml部分代码,chooseDetail为绑定的选择图片的方法

      <view class="chooseView" bindtap="chooseDetail" >
        <view class="add_img">
          .....
        </view>
       </view>

2、上传图片js引用公共js:

//引入相关文件
const app = getApp()
const tools = require('../../utils/util')//token获取方法所在文件
var qiniuUpload = require('../../utils/qiniuUploader')//七牛云上传必须js

data: {
    imgList: [],//初始化定义上传图片集合
  },

3、chooseDetail方法代码如下:

/** 选择图片detail */
  chooseDetail: function() {
    var that = this;
    var state = 0;    // 上传第几张图片
    var imgList = []; // 保存图片数组
    if (that.data.detail.length < 9) {
      wx.chooseImage({
        count: 9,//限制文件个数
        sizeType: [ 'original','compressed'],//原图、压缩图
        sourceType: ['album', 'camera'],//相册、相机
        success: function(photo) {
          //上传到七牛
            wx.showLoading({
              title: '上传中...',
            })
            var uploadArr = photo.tempFilePaths;  // chooseImage上传成功的数组
            var uploadNum = photo.tempFilePaths.length; // 上传数组的长度
            var qiniutoken=getApp().globalData.qiniutoken;//全局定义七牛云token值,可根据需求自定义存储
            new Promise(function (resolve, reject) {
                for (var i = 0; i < uploadNum; i++) {
                    var random = Math.floor(Math.random() * 10000); //随机数
                    console.log("random======"+random);
                    qiniuUpload.upload(uploadArr[i], (res) => {
                        state++;
                        imgList.push(res.imageURL);
                        if (state == uploadNum) {
                            resolve(imgList);
                        }
                    }, (error) => {
                        reject('error');
                        console.log('error: ' + error);
                        wx.hideLoading();
                    }, {
                            uploadURL: 'http://up.qiniup.com', //上传到七牛的那个存储区域,上传区域根据存储空间所在区域决定。
                            domain: 'qiniu.pudu.live/',//CDN加速域名,此处末尾需加个/  不加的话在res.imageURL返回值中图片访问失败
                            uptoken: qiniutoken, //服务端接口获取的七牛token值
                            region: 'ECN',
                            key:'user/'+ random + '.png', // 图片自定义的key(名称) 
                        })
                }
            }).then(function (imgList) {
                console.log("imgList==========="+imgList);
                // imgLlist赋值
                that.setData({
                    imgList: that.data.imgList.concat(imgList)
                })
                wx.hideLoading();
            })
        }
      })
    } else {
      wx.showToast({
        title: '限制选择9个文件',
        icon: 'none',
        duration: 1000
      })
    }
  },

其中qiniuUploader.js文件获取路径:

扫描二维码关注公众号,回复: 16300823 查看本文章

链接:https://pan.baidu.com/s/1Vb93Hi8-GeS0abqHLSwqmQ 
提取码:9fbo 
 

以上小程序直传图片文件到七牛云简介完成,如有疑问留言即可。

猜你喜欢

转载自blog.csdn.net/u014724048/article/details/109159223