微信小程序 sdk for 腾讯云cos

微信小程序仅支持https请求上传文件,目前大部分的教程都是上传到七牛,然而七牛的https请求是额外收费的,所以我选择了腾讯云作为文件服务器,毕竟有免费额度嘛。但是没有现成的教程,经过搜索才发现腾讯云提供了配套小程序开发的SDK,方便微信上传文件时调用。

一、前期准备

  1. 到 (COS对象存储控制台)[https://console.cloud.tencent.com/cos4] 创建存储桶,得到 Bucket(存储桶名称) 和 Region(地域名称)
  2. 到 (控制台密钥管理)[https://console.cloud.tencent.com/capi] 获取您的项目 SecretId 和 SecretKey
  3. 请您到 https://console.qcloud.com/cos 针对您要操作的 bucket 进行跨域(CORS)设置,可以按照如下范例,修改来源 Origin:

二、计算签名

由于签名计算放在前端会暴露 SecretId 和 SecretKey,需要把签名计算过程放在后端实现,前段通过 ajax 向后端获取签名结果,正式部署时请再后端加一层自己网站本身的权限检验。

这里提供 PHP 和 NodeJS 的签名例子,其他语言,请参照对应的 XML SDK

根据后端服务器类型选择对应的签名认证文件放到服务器网站根目录,因为我的站点是运行再php环境下的,所以把auth.php文件放到网站的根目录,然后打开auth.php文件,填上自己的api密匙信息SecretId以及SecretKey

三、上传例子

  1. 把 demo/lib/cos-wx-sdk-v5.js 复制到自己小程序项目代码里,然后引用该sdk文件:var COS = require('../../libs/cos-wx-sdk-v5')------我的项目文件夹是libs
  2. 在需要上传文件的地方贴以下代码
  1. var Bucket = 'test-1252739232';
  2. var Region = 'ap-guangzhou';
  3. var prefix = 'https://' + Bucket + '.cos.' + Region + '.myqcloud.com/';
  4. // 异步获取签名
  5.      var getAuthorization = function (options, callback) {
  6.      wx.request({
  7.        method: 'GET',
  8.        url: 'https://你的服务器域名/auth.php', // 服务端签名
  9.        data: {
  10.          method: options.method.toLowerCase(),
  11.          pathname: options.pathname
  12.        },
  13.        dataType: 'text',
  14.        success: function (result) {
  15.          callback(result.data);
  16.        }
  17.      });
  18.    };
  19.    // 上传文件
  20.    var uploadFile = function (filePath) {
  21.      var Key = filePath.substr(filePath.lastIndexOf('/') + 1); // 这里指定上传的文件名
  22.      getAuthorization({ method: 'post', pathname: '/' }, function (Authorization) {
  23.        var requestTask = wx.uploadFile({
  24.          url: prefix,
  25.          name: 'file',
  26.          filePath: filePath,
  27.          formData: {
  28.            'key': Key,
  29.            'success_action_status': 200,
  30.            'Signature': Authorization
  31.          },
  32.          success: function (res) {
  33.            if (!res || res.data.indexOf('<Error>') > -1) {
  34.              console.log('上传失败', res);
  35.            } else {
  36.              console.log('上传成功', res);
  37.              console.log('文件路径', prefix + Key);
  38.            }
  39.          },
  40.          fail: function (res) {
  41.            console.log('上传失败', res);
  42.          }
  43.        });
  44.        requestTask.onProgressUpdate(function (res) {
  45.          console.log('正在进度:', res);
  46.        });
  47.      });
  48.    };
  49.    // 选择图片
  50.    wx.chooseImage({
  51.      count: 1// 默认9
  52.      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  53.      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
  54.      success: function (res) {
  55.        uploadFile(res.tempFilePaths[0]);
  56.      }
  57.    })
  58.  },

这样就完成了一个简单的微信小程序上传图片到腾讯云cos的功能了,当然如果要成功上传图片,还需要将腾讯云cos的域名加到微信小程序的域名白名单内.

登录微信公众平台 设置 --> 开发设置,将您刚才得到的访问域名填入服务器域名

相关推荐

wordpress文章部分内容加密功能的实现方法

目前wordpress文章的可见性可以设置全部公开,也可以设置密码保护。但是如果是想实现文章的一部分内容加密,需要输入密码才能全部可见的话又如何实现呢? 最简单的方法莫过于使用短代码,网上很多要求关注公众号 ...

筹码力度副图及选股公式

副图指标 DRAWGBK(CLOSE>OPEN,RGB(40,40,40),RGB(40,40,40),1,2,1); NOTEXT箱底:LLV(MA((LOW+HIGH+CLOSE+OPEN)/4,6),88),COLORGREEN,LINETHICK2; X_1:=EMA((HIGH+LOW+CLOSE)/3*(HHV(HIGH,10)-CLOSE)/(HHV(HIG ...

通达信主力控盘主图指标源码

主力控盘主图指标 {阻力支撑线} V1:=ABS((2*CLOSE+HIGH+LOW)/4-EMA(CLOSE,20))/EMA(CLOSE,20); V2:=(1-7/100)*(DMA(CLOSE,V1)); V3:=(1+7/100)*(DMA(CLOSE,V1)); V5:=EMA((LOW+HIGH+CLOSE)/3,5); 支撑:REFDATE(V ...

小米ax3600官方固件安装adguardhome

小米ax3600路由器開啟SSH權限後就可以安裝插件了,目前使用最多的莫過於于shellclash+adguardhome,第一個shellclash安裝過於簡單,就一行代碼的事情,這裡就不過多贅述。adguardhome是一款非常好用的去廣告程序 ...

暂无评论

发表评论