由于 v4 接口只能上传20MB文件,请直接使用基于 XML API 的 cos-wx-sdk-v5。
微信小程序 sdk for 腾讯云对象存储服务
-
请您到 https://console.qcloud.com/cos 获取您的项目 ID(appid),bucket,secret_id 和 secret_key。
-
请您到 https://console.qcloud.com/cos 针对您要操作的 bucket 进行跨域(CORS)设置,可以按照如下范例,修改来源 Origin:
从 github 下载源码,将 SDK 中 dist 目录下的 cos-wx-sdk-v4.js 包含到您的项目中。
把 cos-wx-sdk-v4.js 放在小程序 app/lib/ 目录下,在您的页面 js 里引入:
require('../../lib/cos-wx-sdk-v4');- 小程序文件上传过程中,js 没权限读取文件内容,所以 wx-sdk 相比 js-sdk 少了分片上传的所有逻辑。
- 由于文件不分片上传只支持 20MB 大小,wx-sdk 上传接口最大只支持 20MB 大小的文件上传。
- 小程序里发送请求使用微信提供的 api
wx.request和wx.uploadFile。
所有的示例代码实现可以参考 samples/simple-app/pages/index/index.js
//初始化逻辑 //特别注意: WX-SDK 使用之前请先到 https://console.qcloud.com/cos 对相应的Bucket进行跨域设置 var cos = new CosCloud({ appid: appid, // APPID 必填参数 bucket: bucket, // bucketName 必填参数 region: 'sh', // 地域信息 必填参数 华南地区填 gz 华东填 sh 华北填 tj getAppSign: function (callback) {//获取签名 必填参数 // 下面简单讲一下获取签名的几种办法 // 首先,签名的算法具体查看文档:[COS V4 API 签名算法](https://www.qcloud.com/document/product/436/6054) // 1.搭建一个鉴权服务器,自己构造请求参数获取签名,推荐实际线上业务使用,优点是安全性好,不会暴露自己的私钥 // 拿到签名之后记得调用callback /* wx.request({ url: 'SIGN_URL', data: {once: false}, dataType: 'text', success: function (result) { var sig = result.data; callback(sig); } }); */ // 2.直接在浏览器前端计算签名,需要获取自己的 accessKey 和 secretKey, 一般在调试阶段使用 // 拿到签名之后记得调用 callback // var res = getAuth(false); // 这个函数自己根据签名算法实现 // callback(res); // 3.直接复用别人算好的签名字符串, 一般在调试阶段使用 // 拿到签名之后记得调用 callback // callback('YOUR_SIGN_STR') }, getAppSignOnce: function (callback) { //单次签名,必填参数,参考上面的注释即可 // 填上获取单次签名的逻辑 // var res = getAuth(true); // 这个函数自己根据签名算法实现 // callback(res); } });以下示例代码需要前置定义部分变量
var bucket = 'WXAPP_BUCKET_NAME'; var successCallback = function (result) { console.log('success', result); } var errorCallback = function (result) { console.log('success', result); } var progressCallback = function (info) { console.log('success', result); }wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success: function (res) { if (res.tempFilePaths && res.tempFilePaths.length) { var tempFilePath = res.tempFilePaths[0]; wx.showToast({title: '正在上传...', icon: 'loading', duration: 60000}); cos.uploadFile({ success: successCallback, error: errorCallback, onProgress: progressCallback, // 返回 info 对象,带有 loaded、total、percent、speed 四个字段 bucket: 'wx', path: '/test.png', filepath: tempFilePath, insertOnly: 0, // insertOnly==0 表示允许覆盖文件 1表示不允许覆盖 bizAttr: 'test-biz-val' }); } } });cos.createFolder(successCallback, errorCallback, bucket, '/test', 'folder_first_attr');cos.getFolderList(successCallback, errorCallback, bucket, '/test');cos.getFolderStat(successCallback, errorCallback, bucket, '/test');cos.updateFolder(successCallback, errorCallback, bucket, '/test', 'folder_new_attr');cos.deleteFolder(successCallback, errorCallback, bucket, '/test');cos.deleteFile(successCallback, errorCallback, bucket, '/test.png');cos.getFileStat(successCallback, errorCallback, bucket, '/test.png');cos.updateFile(successCallback, errorCallback, bucket, '/test.png', 'file_new_attr');cos.copyFile(successCallback, errorCallback, bucket, '/test.png', '/test-cp.png', 0);cos.copyFile(successCallback, errorCallback, bucket, '/test.png', '/test-cp.png', 0);欢迎提 issue
