微信小程序分享

微信小程序-腾讯云Cos上传文件

2018-10-19  本文已影响1064人  Mr_Atom

        之前有做过iOS的Cos上传文件,小程序的是第一次做.在网上找了好多资料素材.JS的有很多可以参考,但是关于小程序这边比较少.正好我也做完了,就拿出来分享一下.

        腾讯自己在github上有关于小程序Cos的使用说明.

        附上链接:https://github.com/tencentyun/cos-wx-sdk-v5.

        具体的实现方法很简单,首先要去上面链接里下载项目,从demo/lib中找到cos-wx-sdk-v5.js,拖入自己的项目中.如果之前没有用过cos服务的,要去腾讯云的官方注册,创建并且获取一些值.这些上面链接里写的很清楚,按步骤做就好了.

        前期准备都做好了之后,就是写代码了.下面是github上腾讯官方的代码:

小程序cos上传

下面的方法适合调试使用(将SecretId和SecretKey写本地),大家可以参考,代码如下:

// 腾讯云上传操作

  // 开始上传

  startUploadFile: function (mediaType, filePath, callback) {

    wx.showLoading({

      title: '上传中...',

    })

    var Bucket = '你自己创建的Bucket';

    var Region = '你自己的Region';

    console.log(Bucket, Region);

    var that = this;

    var cos = new COS({

      getAuthorization: function (options, callback) {

        // 调试方式

        var authorization = COS.getAuthorization({

          SecretId: '你自己的SecretId',

          SecretKey: '你自己的SecretKey',

            Method: options.Method,

            Key: options.Key

          });

          callback(authorization);

      }

    });

    // 生成上传文件名

    var Key = filePath.substr(filePath.lastIndexOf('/') + 1); // 这里指定上传的文件名       

    var dateObj = new Date();       

    var timestamp = dateObj.getTime();       

    var nowDate = dateObj.toLocaleDateString();       

    var formatDate = nowDate.replace(/\//g,"-");  // 格式斜杠日期       

    console.log(formatDate);       

    var filename = formatDate + '/' + timestamp+Key; 

    // 上传方法

    cos.postObject({

      Bucket: Bucket,

      Region: Region,

      Key: filename,

      FilePath: filePath,

      onProgress: function (info) {

      }

    }, function (err, data) {

      wx.hideLoading();

      console.log('err'+err);

      console.log(JSON.stringify(data));

      if (err) {

        callback(false); // 上传失败的callback

      }

      if (data) {

        callback(true, mediaData); // 上传成功的callback

      }

    });

  },

  真正项目中的上传方法,区别在authorization的创建方法(使用临时签名).代码如下:

   var getAuthorization = function (options, callback) {

   // 后端通过获取临时密钥给到前端,前端计算签名

      that.fetchCosTempKeyInfo((isSuccess,data)=>{

        if (isSuccess) {

          if (data) {

            callback({

              TmpSecretId: data.tmpSecretId,

              TmpSecretKey: data.tmpSecretKey,

              XCosSecurityToken: data.sessionToken,

              ExpiredTime: data.expiredTime,

            });

          } else {

            wx.hideLoading();

            app.showToast('获取上传信息失败!');

            return;

          }

        } else {

          wx.hideLoading();

          app.showToast('获取上传信息失败!');

          return;

        }

      })

    }

    var cos = new COS({

      getAuthorization: getAuthorization,

    });

// 获取临时签名信息

  fetchCosTempKeyInfo:function(callback) {

     var that = this;

    //发起网络请求获取临时签名信息

    //如果获取成功

    callback(true,result.data);

    // 如果失败

    callback(false, error);

  },

    谢谢大家!

上一篇 下一篇

猜你喜欢

热点阅读