npm i cos-nodejs-sdk-v5 --save
var request = require('request');var COS = require('cos-nodejs-sdk-v5');var cos = new COS({getAuthorization: function (options, callback) {// 初始化时不会调用,只有调用 cos 方法(例如 cos.putObject)时才会进入// 异步获取临时密钥request({url: 'https://example.com/sts',data: {// 可从 options 取需要的参数}}, function (err, response, body) {try {var data = JSON.parse(body);var credentials = data.credentials;} catch(e) {}if (!data || !credentials) return console.error('credentials invalid');callback({TmpSecretId: credentials.tmpSecretId, // 临时密钥的 tmpSecretIdTmpSecretKey: credentials.tmpSecretKey, // 临时密钥的 tmpSecretKeySecurityToken: credentials.sessionToken, // 临时密钥的 sessionTokenExpiredTime: data.expiredTime, // 临时密钥失效时间戳,是申请临时密钥时,时间戳加 durationSeconds});});}});
// SECRETID 和 SECRETKEY 请登录 https://console.tencentcloud.com/cam/capi 进行查看和管理var COS = require('cos-nodejs-sdk-v5');var 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 | 是 |
FileParallelLimit | 同一个实例下上传的文件并发数,默认值3 | Number | 否 |
ChunkParallelLimit | 同一个上传文件的分块并发数,默认值3 | Number | 否 |
ChunkRetryTimes | 分块上传及分块复制时,出错重试次数,默认值2(加第一次,请求共3次) | Number | 否 |
ChunkSize | 分块上传时,每块的字节数大小,单位为 Byte,默认值1048576(1MB) | Number | 否 |
SliceSize | 使用 uploadFiles 批量上传时,文件大小大于该数值将使用按分片上传,否则将调用简单上传,单位 Byte,默认值1048576(1MB) | Number | 否 |
CopyChunkParallelLimit | 进行分块复制操作中复制分块上传的并发数,默认值20 | Number | 否 |
CopyChunkSize | 使用 sliceCopyFile 分块复制文件时,每片的大小字节数,单位为 Byte,默认值10485760(10MB) | Number | 否 |
CopySliceSize | 使用 sliceCopyFile 分片复制文件时,文件大小大于该数值将使用分片复制 ,否则将调用简单复制,单位为 Byte,默认值10485760(10MB) | Number | 否 |
ProgressInterval | 上传进度的回调方法 onProgress 的回调频率,单位 ms ,默认值1000 | Number | 否 |
Protocol | 发请求时用的协议,可选项 https: 、http: ,默认判断当前页面是 http: 时使用 http: ,否则使用 https: | String | 否 |
ServiceDomain | 调用 getService 方法时,请求的域名,例如 service.cos.myqcloud.com | String | 否 |
Domain | 调用操作存储桶和对象的 API 时自定义请求域名。可以使用模板,<br>例如 "{Bucket}.cos.{Region}.myqcloud.com" ,即在调用 API 时会使用参数中传入的 Bucket 和 Region 进行替换 | String | 否 |
UploadQueueSize | 上传队列最长大小,超出队列大小并失败/已完成/已取消状态的任务会被清理,默认1000 | Number | 否 |
ForcePathStyle | 强制使用后缀式模式发请求。后缀式模式中 Bucket 会放在域名后的 pathname 里,并且 Bucket 会加入签名 pathname 计算,默认 false | Boolean | 否 |
UploadCheckContentMd5 | 强制上传文件也校验 Content-MD5,会对文件请求 Body 计算 md5 放在 header 的 Content-MD5 字段里,默认 false | Boolean | 否 |
Timeout | 超时时间,单位毫秒,默认为0,即不设置超时时间 | Number | 否 |
KeepAlive | 多个请求同用 TCP 连接,默认 true,若请求并发量大建议 打开 | Boolean | 否 |
StrictSsl | 严格校验 HTTPS 证书,默认 true | Boolean | 否 |
Proxy | 请求时使用 HTTP 代理,例如: http://127.0.0.1:8080 | String | 否 |
getAuthorization | 获取签名的回调方法,如果没有 SecretId、SecretKey 时,这个参数必选 | Function | 否 |
UseAccelerate | Boolean | 否 |
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 字段 | String | 是 |
StartTime | 密钥获取的开始时间,即获取时刻的时间戳,单位秒,startTime,如:1580000000,用于签名开始时间,传入该参数可避免前端时间偏差签名过期问题 | String | 否 |
ExpiredTime | 获取回来的临时密钥的 expiredTime,超时时刻的时间戳,单位秒,如:1580000900 | String | 是 |
getAuthorization: function(options, callback) { ... }
参数名 | 参数描述 | 类型 |
options | 获取签名需要的参数对象 | Object |
- Method | 当前请求的 Method | String |
- Pathname | 请求路径,用于签名计算 | String |
- Key | 对象键(Object 的名称),对象在存储桶中的唯一标识,了解更多请参见 对象概述 | String |
- Query | 当前请求的 query 参数对象,{key: 'val'} 的格式 | Object |
- Headers | 当前请求的 header 参数对象,{key: 'val'} 的格式 | Object |
callback | 临时密钥获取完成后的回调 | Function |
属性名 | 参数描述 | 类型 | 是否必填 |
Authorization | 计算得到的签名字符串 | String | 是 |
SecurityToken | 获取回来的临时密钥的 sessionToken,对应 header 的 x-cos-security-token 字段 | String | 否 |
// 这里省略初始化过程和上传参数var cos = new COS({ ... });cos.uploadFile({ ... }, function(err, data) {if (err) {console.log('上传出错', err);} else {console.log('上传成功', data);}});
// 这里省略初始化过程和上传参数var cos = new COS({ ... });cos.uploadFile({ ... }).then(data => {console.log('上传成功', data);}).catch(err => {console.log('上传出错', err);});
async function upload() {// 这里省略初始化过程和上传参数var cos = new COS({ ... });try {var data = await cos.uploadFile({ ... });return { err: null, data: data }} catch (err) {return { err: err, data: null };}}// 可以同步拿到请求的返回值,这里举例说明,实际返回的数据格式可以自定义var uploadResult = await upload();if (uploadResult.err) {console.log('上传出错', uploadResult.err);} else {console.log('上传成功', uploadResult.data);}
var cos = new COS({....});/* 自己封装的上传方法 */function myUpload() {// 不需要在每个方法里创建一个 COS SDK 实例// var cos = new COS({// ...// });cos.putObject({....});}/* 自己封装的删除方法 */function myDelete() {// 不需要在每个方法里创建一个 COS SDK 实例// var cos = new COS({// ...// });cos.deleteObject({....});}
cos.putBucket({Bucket: 'examplebucket-1250000000',Region: 'COS_REGION'}, function(err, data) {console.log(err || data);});
cos.getService(function (err, data) {console.log(data && data.Buckets);});
cos.putObject({Bucket: 'examplebucket-1250000000', /* 必须 */Region: 'COS_REGION', /* 必须 */Key: 'exampleobject', /* 必须 */StorageClass: 'STANDARD',Body: fs.createReadStream('./exampleobject'), // 上传文件对象onProgress: function(progressData) {console.log(JSON.stringify(progressData));}}, function(err, data) {console.log(err || data);});
cos.getBucket({Bucket: 'examplebucket-1250000000', /* 必须 */Region: 'COS_REGION', /* 必须 */Prefix: 'a/', /* 非必须 */}, function(err, data) {console.log(err || data.Contents);});
cos.getObject({Bucket: 'examplebucket-1250000000', /* 必须 */Region: 'COS_REGION', /* 必须 */Key: 'exampleobject', /* 必须 */Output: fs.createWriteStream('./exampleobject'),}, function(err, data) {console.log(err || data);});
cos.deleteObject({Bucket: 'examplebucket-1250000000', /* 必须 */Region: 'COS_REGION', /* 必须 */Key: 'exampleobject' /* 必须 */}, function(err, data) {console.log(err || data);});
本页内容是否解决了您的问题?