产品动态
产品公告
const COS = require('./lib/cos-wx-sdk-v5.js'); // 开发时使用// const COS = require('./lib/cos-wx-sdk-v5.min.js'); // 上线时使用压缩包
npm install cos-wx-sdk-v5
examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com。examplebucket-1250000000.cos.accelerate.myqcloud.com。const COS = require('./lib/cos-wx-sdk-v5.js'); // 开发时使用// const COS = require('./lib/cos-wx-sdk-v5.min.js'); // 上线时使用压缩包// console.log(COS.version); sdk 版本需要不低于 1.7.2const cos = new COS({SecretId: 'your_tmpSecretId', // sts 服务下发的临时 secretIdSecretKey: 'your_tmpSecretKey', // sts 服务下发的临时 secretKeySecurityToken: 'your_sessionToken', // sts 服务下发的临时 SessionTokenStartTime: 1720770679403, // 建议传入服务端时间,可避免客户端时间不准导致的签名错误ExpiredTime: 1720771991367, // 临时密钥过期时间SimpleUploadMethod: 'putObject', // 强烈建议,高级上传、批量上传内部对小文件做简单上传时使用 putObject,sdk 版本至少需要v1.3.0});
const COS = require('./lib/cos-wx-sdk-v5.js'); // 开发时使用// const COS = require('./lib/cos-wx-sdk-v5.min.js'); // 上线时使用压缩包const cos = new COS({SimpleUploadMethod: 'putObject', // 强烈建议,高级上传、批量上传内部对小文件做简单上传时使用 putObject,sdk 版本至少需要v1.3.0getAuthorization: async function (options, callback) {const data = await fetchSts('xxxx'); // 需自行实现获取临时密钥逻辑callback({TmpSecretId: data.credentials.tmpSecretId,TmpSecretKey: data.credentials.tmpSecretKey,SecurityToken: data.credentials.sessionToken,// 建议返回服务器时间作为签名的开始时间,避免客户端本地时间偏差过大导致签名错误StartTime: data.startTime, // 时间戳,单位秒,如:1580000000ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000ScopeLimit: true, // 细粒度控制权限需要设为 true,会限制密钥只在相同请求时重复使用});}});
const COS = require('./lib/cos-wx-sdk-v5.js'); // 开发时使用// const COS = require('./lib/cos-wx-sdk-v5.min.js'); // 上线时使用压缩包const cos = new COS({SimpleUploadMethod: 'putObject', // 强烈建议,高级上传、批量上传内部对小文件做简单上传时使用putObject,sdk版本至少需要v1.3.0getAuthorization: function (options, callback) {// 初始化时不会调用,只有调用 cos 方法(例如 cos.putObject)时才会进入// 异步获取临时密钥// 服务端 JS 示例:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/// 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk// STS 详细文档指引看:https://www.tencentcloud.com/document/product/436/14048const stsUrl = 'http://example.com/server/sts'; // stsUrl 替换成您自己的后端服务wx.request({url: stsUrl,data: {bucket: options.Bucket,region: options.Region,},dataType: 'json',success: function (result) {const data = result.data;const credentials = data && data.credentials;if (!data || !credentials) return console.error('credentials invalid');// 检查 credentials 格式console.log(credentials);callback({TmpSecretId: credentials.tmpSecretId,TmpSecretKey: credentials.tmpSecretKey,// v1.2.0之前版本的 SDK 使用 XCosSecurityToken 而不是 SecurityTokenSecurityToken: credentials.sessionToken,// 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误StartTime: data.startTime, // 时间戳,单位秒,如:1580000000ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000900});}});}});export default cos;
import cos from 'utils/cos';let taskId;// 上传文件,file 为选择的文件async function upload(file) {try {const data = await cos.uploadFile({Bucket: 'examplebucket-1250000000', // 填写自己的 bucket,必须字段Region: 'COS_REGION', // 存储桶所在地域,必须字段Key: '1.jpg', // 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段FilePath: file.path, /* 必须 */FileSize: file.size, /* v1.4.3之前的版本必须,v1.4.3及以后的版本非必须 */SliceSize: 1024 * 1024 * 5, // 触发分块上传的阈值,超过5MB 使用分块上传,小于5MB使用简单上传。可自行设置,非必须onProgress: function(progressData) {console.log('上传进度:', progressData);},onTaskReady: function(id) { // 非必须taskId = id;},});console.log('上传成功', data);} catch (e) {console.error('上传失败', e);}}// 监听上传队列cos.on('update-list', data => {console.log(data);});// 暂停上传任务cos.pauseTask(taskId);// 重启上传任务cos.restartTask(taskId);// 取消上传任务cos.cancelTask(taskId);
const COS = require('./lib/cos-wx-sdk-v5.js'); // 开发时使用// const COS = require('./lib/cos-wx-sdk-v5.min.js'); // 上线时使用压缩包// SECRETID 和 SECRETKEY 请登录 https://console.tencentcloud.com/cam/capi 进行查看和管理const cos = new COS({SecretId: process.env.SecretId, // 推荐使用环境变量获取;用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1SecretKey: process.env.SecretKey, // 推荐使用环境变量获取;用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1});
参数名 | 参数描述 | 类型 | 是否必填 |
SecretId | 用户的 SecretId,建议只在前端调试时使用,避免暴露密钥 | String | 否 |
SecretKey | 用户的 SecretKey,建议只在前端调试时使用,避免暴露密钥 | String | 否 |
SecurityToken | 获取回来的临时密钥的 sessionToken(v1.7.2版本开始支持)。当 SecretId、SecretKey 传入临时密钥时,SecurityToken 必填 | String | 否 |
StartTime | 获取回来的临时密钥的有效起始时间戳(v1.7.2版本开始支持),单位:秒。当 SecretId、SecretKey 传入临时密钥时,建议传入 StartTime | Number | 否 |
ExpiredTime | 获取回来的临时密钥的有效过期时间戳(v1.7.2版本开始支持),单位:秒。当 SecretId、SecretKey 传入临时密钥时,建议传入 ExpiredTime | Number | 否 |
FileParallelLimit | 同一个实例下上传的文件并发数,默认值3 | Number | 否 |
ChunkParallelLimit | 同一个上传文件的分块并发数,默认值3 | Number | 否 |
ChunkRetryTimes | 分块上传及分块复制时,出错重试次数,默认值2(加第一次,请求共3次) | Number | 否 |
ChunkSize | 分块上传时,每块的字节数大小,默认值1048576(1MB) | Number | 否 |
SliceSize | 使用 uploadFiles 批量上传时,文件大小大于该数值就使用分块上传 sliceUploadFile,否则使用简单上传 putObject,默认值1048576(1MB) | Number | 否 |
CopyChunkParallelLimit | 进行分块复制操作中复制分块上传的并发数,默认值20 | Number | 否 |
CopyChunkSize | 使用 sliceCopyFile 分块复制文件时,每块的大小字节数,默认值10485760(10MB) | Number | 否 |
CopySliceSize | 使用 sliceCopyFile 分块复制文件时,文件大小大于该数值就会使用分块复制 sliceCopyFile ,否则使用简单复制 putObjectCopy,默认值10485760(10MB) | Number | 否 |
ProgressInterval | 上传进度的回调方法 onProgress 的回调频率,单位ms ,默认值1000 | Number | 否 |
Protocol | 发请求时用的协议,可选项 https:、http:,小程序里只能使用 https | String | 否 |
ServiceDomain | 调用 getService 方法时,请求的域名,例如 service.cos.myqcloud.com | String | 否 |
Domain | 调用操作存储桶和对象的 API 时自定义请求域名。可以使用模板,例如 "{Bucket}.cos.{Region}.myqcloud.com" ,即在调用 API 时会使用参数中传入的 Bucket 和 Region 进行替换 | String | 否 |
UploadQueueSize | 上传队列最长大小,超出的任务如果状态不是 waiting、checking、uploading 会被清理,默认10000 | Number | 否 |
UploadCheckContentMd5 | 强制上传文件校验 Content-MD5,会对文件请求 Body 计算 MD5 放在 header 的 Content-MD5 字段里,默认为 false | Boolean | 否 |
getAuthorization | 获取签名的回调方法,如果没有 SecretId、SecretKey 时,这个参数必选。 注意: 该回调方法在初始化实例时传入,在使用实例调用接口时才会执行并获取签名。 | Function | 否 |
UseAccelerate | Boolean | 否 | |
SimpleUploadMethod | 高级上传、批量上传内部对小文件做简单上传的方法名,可选'postObject'或'putObject',默认为'postObject'(该参数v1.3.0版本开始支持) | String | 否 |
getAuthorization: function(options, callback) { ... }
参数名 | 参数描述 | 类型 |
options | 获取临时密钥需要的参数对象 | Object |
- Bucket | 存储桶的名称,命名规则为 BucketName-APPID,此处填写的存储桶名称必须为此格式 | String |
- Region | String | |
callback | 临时密钥获取完成后的回传方法 | Function |
属性名 | 参数描述 | 类型 | 是否必填 |
TmpSecretId | 获取回来的临时密钥的 tmpSecretId | String | 是 |
TmpSecretKey | 获取回来的临时密钥的 tmpSecretKey | String | 是 |
SecurityToken | 获取回来的临时密钥的 sessionToken,对应 header 的 x-cos-security-token 字段。v1.2.0之前版本的 SDK 使用 XCosSecurityToken 而不是 SecurityToken | String | 是 |
StartTime | 密钥获取的开始时间,即获取时刻的时间戳,单位秒,startTime,如:1580000000,用于签名开始时间,传入该参数可避免前端时间偏差签名过期问题 | String | 否 |
ExpiredTime | 获取回来的临时密钥的 expiredTime,超时时刻的时间戳,单位秒,如:1580000900 | String | 是 |
https://h.trace.qq.com;https://oth.str.beacon.qq.com;https://otheve.beacon.qq.com。// 完整demo可参考:https://github.com/tencentyun/cos-wx-sdk-v5/blob/master/demo/tools.jsconst Beacon = require('./lib/beacon_mp.min');new COS({BeaconReporter,})
// 这里省略初始化过程和上传参数const cos = new COS({ ... });cos.uploadFile({ ... }, function(err, data) {if (err) {console.log('上传出错', err);} else {console.log('上传成功', data);}});
// 这里省略初始化过程和上传参数const cos = new COS({ ... });cos.uploadFile({ ... }).then(data => {console.log('上传成功', data);}).catch(err => {console.log('上传出错', err);});
async function upload() {// 这里省略初始化过程和上传参数const cos = new COS({ ... });try {const data = await cos.uploadFile({ ... });return { err: null, data: data }} catch (err) {return { err: err, data: null };}}// 可以同步拿到请求的返回值,这里举例说明,实际返回的数据格式可以自定义const uploadResult = await upload();if (uploadResult.err) {console.log('上传出错', uploadResult.err);} else {console.log('上传成功', uploadResult.data);}
var COS = require('./lib/cos-wx-sdk-v5');/* 初始化 cos */const cos = new COS({getAuthorization: function (options, callback) {wx.request({method: 'GET',url: config.stsUrl,dataType: 'json',success: function (result) {var data = result.data;var credentials = data && data.credentials;if (!data || !credentials) {console.error('获取临时密钥失败');return;}callback({TmpSecretId: credentials.tmpSecretId,TmpSecretKey: credentials.tmpSecretKey,SecurityToken: credentials.sessionToken,StartTime: data.startTime,ExpiredTime: data.expiredTime,});},fail: function (err) {console.error('请求临时密钥失败:', err);}});}});function createBucket() {cos.putBucket({Bucket: 'examplebucket-1250000000',Region: 'ap-beijing'}, function (err, data) {if (err) {console.log('创建存储桶失败', err);} else {console.log('创建存储桶成功', data);console.log('存储桶位置:', data.Location);}});}
var COS = require('./lib/cos-wx-sdk-v5');var config = require('./config');/* 初始化 cos */const cos = new COS({getAuthorization: function (options, callback) {wx.request({method: 'GET',url: config.stsUrl,dataType: 'json',success: function (result) {var data = result.data;var credentials = data && data.credentials;if (!data || !credentials) {console.error('获取临时密钥失败');return;}callback({TmpSecretId: credentials.tmpSecretId,TmpSecretKey: credentials.tmpSecretKey,SecurityToken: credentials.sessionToken,StartTime: data.startTime,ExpiredTime: data.expiredTime,});},fail: function (err) {console.error('请求临时密钥失败:', err);}});}});/* 获取存储桶列表 */function getBucketList() {cos.getService(function (err, data) {if (err) {console.log('获取存储桶列表失败', err);} else {console.log('获取存储桶列表成功', data);console.log(data && data.Buckets);}});}
简单上传对象和分块上传的权限。请参见 授权指引。/* 初始化cos */const cos = new COS({// getAuthorization: funciton() {}, // 参考上方初始化SimpleUploadMethod: 'putObject', // 强烈建议,高级上传、批量上传内部对小文件做简单上传时使用putObject});function handleFileInUploading(fileName, filePath) {cos.uploadFile({Bucket: 'examplebucket-1250000000', /* 填写自己的 bucket,必须字段 */Region: 'COS_REGION', /* 存储桶所在地域,必须字段 */Key: fileName, /* 存储在桶里的对象键(例如:1.jpg,a/b/test.txt,图片.jpg)支持中文,必须字段 */FilePath: filePath, /* 上传文件路径,必须字段 */SliceSize: 1024 * 1024 * 5, /* 触发分块上传的阈值,超过5MB使用分块上传,小于5MB使用简单上传。可自行设置,非必须 */onProgress: function(progressData) {console.log(JSON.stringify(progressData));}}, function(err, data) {if (err) {console.log('上传失败', err);} else {console.log('上传成功');}});}/* 选择文件,得到临时路径(以选择图片为例,选择其他文件请参考小程序官方 api) */wx.chooseImage({count: 1, // 默认9sizeType: ['original'], // 可以指定是原图还是压缩图,默认用原图sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有success: function (res) {const filePath = res.tempFiles[0].path;const fileName = filePath.substr(filePath.lastIndexOf('/') + 1);handleFileInUploading(fileName, filePath);}});
var COS = require('./lib/cos-wx-sdk-v5');var config = require('./config');/* 初始化 cos */const cos = new COS({getAuthorization: function (options, callback) {wx.request({method: 'GET',url: config.stsUrl,dataType: 'json',success: function (result) {var data = result.data;var credentials = data && data.credentials;if (!data || !credentials) {console.error('获取临时密钥失败');return;}callback({TmpSecretId: credentials.tmpSecretId,TmpSecretKey: credentials.tmpSecretKey,SecurityToken: credentials.sessionToken,StartTime: data.startTime,ExpiredTime: data.expiredTime,});},fail: function (err) {console.error('请求临时密钥失败:', err);}});}});/* 获取存储桶中的对象列表 */function getObjectList() {cos.getBucket({Bucket: 'examplebucket-1250000000',Region: 'ap-beijing',Prefix: 'exampledir/', // 这里传入列出的文件前缀}, function (err, data) {if (err) {console.log('获取对象列表失败', err);} else {console.log('获取对象列表成功', data);console.log(err || data.Contents);}});}
var COS = require('./lib/cos-wx-sdk-v5');var config = require('./config');/* 初始化 cos */const cos = new COS({getAuthorization: function (options, callback) {wx.request({method: 'GET',url: config.stsUrl,dataType: 'json',success: function (result) {var data = result.data;var credentials = data && data.credentials;if (!data || !credentials) {console.error('获取临时密钥失败');return;}callback({TmpSecretId: credentials.tmpSecretId,TmpSecretKey: credentials.tmpSecretKey,SecurityToken: credentials.sessionToken,StartTime: data.startTime,ExpiredTime: data.expiredTime,});},fail: function (err) {console.error('请求临时密钥失败:', err);}});}});/* 下载对象 */function getObject() {cos.getObject({Bucket: 'examplebucket-1250000000',Region: 'ap-beijing',Key: 'exampleobject.txt',}, function (err, data) {if (err) {console.log('下载对象失败', err);} else {console.log('下载对象成功', data);console.log(err || data.Body);}});}
var COS = require('./lib/cos-wx-sdk-v5');var config = require('./config');/* 初始化 cos */const cos = new COS({getAuthorization: function (options, callback) {wx.request({method: 'GET',url: config.stsUrl,dataType: 'json',success: function (result) {var data = result.data;var credentials = data && data.credentials;if (!data || !credentials) {console.error('获取临时密钥失败');return;}callback({TmpSecretId: credentials.tmpSecretId,TmpSecretKey: credentials.tmpSecretKey,SecurityToken: credentials.sessionToken,StartTime: data.startTime,ExpiredTime: data.expiredTime,});},fail: function (err) {console.error('请求临时密钥失败:', err);}});}});/* 删除对象 */function deleteObject() {cos.deleteObject({Bucket: 'examplebucket-1250000000',Region: 'ap-beijing',Key: 'picture.jpg',}, function (err, data) {if (err) {console.log('删除对象失败', err);} else {console.log('删除对象成功', data);console.log(err || data);}});}
文档反馈