
cos-wx-sdk-v5
工具腾讯云对象存储(COS)微信小程序 SDK,提供文件上传、下载、删除、管理等操作,支持分片上传、断点续传、批量操作,是小程序文件存储场景的官方推荐方案
cosstorageuploaddownloadtencent-cloudfilecdn对象存储
详细文档
资源概述#
cos-wx-sdk-v5 是腾讯云官方维护的 对象存储 COS(Cloud Object Storage) 微信小程序 SDK。它让小程序直接与 COS 交互,实现文件上传(含分片上传、断点续传)、下载、删除、管理等操作,无需经过自有服务器中转,大幅降低服务器带宽压力。
核心特性#
- 官方维护:腾讯云团队持续更新,npm 67 个版本
- 安全鉴权:基于 STS 临时密钥方案,前端永不暴露 SecretKey
- 分片上传:大文件自动分片上传,支持断点续传
- 批量操作:一次调用上传/删除多个文件
- CDN 加速:配合腾讯云 CDN 可实现全球加速访问
- 零框架依赖:纯 JavaScript,原生小程序和 uni-app 均可直接使用
项目数据#
| 指标 | 数值 |
|---|---|
| GitHub Stars | 196⭐ |
| Forks | 463 |
| npm 版本数 | 67(latest: 1.8.0) |
| 周下载量 | ~2,600 |
| 最后推送 | 2026-04-23 |
| 许可证 | MIT |
| 创建年份 | 2017 |
设计规范#
架构设计#
SDK 采用前端 + 后端协作的安全架构:
小程序前端 ──→ COS 存储桶
↑ ↑
│ │
STS 临时密钥 ←── 后端签名服务
↑
腾讯云 STS API
- 前端(SDK):负责文件选择、上传、下载等操作
- 后端(STS):生成临时密钥返回给前端,控制权限范围和有效期
- COS:存储和分发文件,可配合 CDN 加速
安全要点#
- 切勿在前端硬编码 SecretId / SecretKey
- 使用 STS 临时密钥,设置最小权限(仅允许操作指定 Bucket 和路径)
- 临时密钥有效期建议 30 分钟~2 小时
- 后端签名服务应加入用户身份验证
审核规范#
前置要求#
- 需要注册腾讯云账号并完成实名认证
- 创建 COS 存储桶(选择合适的地域)
- 配置 CORS 跨域规则(允许小程序域名访问)
小程序域名白名单#
在微信公众平台 → 开发管理 → 服务器域名中添加:
- request 合法域名:
https://sts.tencentcloudapi.com(STS 临时密钥) - uploadFile / downloadFile 合法域名:
https://<bucket>.cos.<region>.myqcloud.com
开发指南#
安装#
# 方式一:npm 安装(推荐)
npm install cos-wx-sdk-v5
# 方式二:直接引入 JS 文件
# 将 cos-wx-sdk-v5.js 复制到项目 lib/ 目录
基础用法:上传文件#
const COS = require('cos-wx-sdk-v5')
// 初始化 COS 实例
const cos = new COS({
// 通过后端获取临时密钥(安全方案)
getAuthorization: function (options, callback) {
wx.request({
url: 'https://your-server.com/sts',
data: {
bucket: options.Bucket,
region: options.Region,
},
dataType: 'json',
success: function (result) {
const credentials = result.data.credentials
callback({
TmpSecretId: credentials.tmpSecretId,
TmpSecretKey: credentials.tmpSecretKey,
SecurityToken: credentials.sessionToken,
ExpiredTime: result.data.expiredTime,
})
},
})
},
})
const Bucket = 'your-bucket-1250000000'
const Region = 'ap-guangzhou'
// 上传图片
wx.chooseImage({
count: 1,
success(res) {
const filePath = res.tempFilePaths[0]
const fileName = `uploads/${Date.now()}-${Math.random().toString(36).slice(2)}.jpg`
cos.uploadFile({
Bucket,
Region,
Key: fileName,
FilePath: filePath,
SliceSize: 1024 * 1024 * 5, // 超过 5MB 启用分片上传
}, function (err, data) {
if (err) {
console.error('上传失败', err)
} else {
const url = `https://${data.Location}`
console.log('上传成功', url)
}
})
},
})
下载文件#
cos.getObject({
Bucket,
Region,
Key: 'uploads/example.jpg',
DataType: 'blob',
}, function (err, data) {
if (err) {
console.error('下载失败', err)
} else {
// data.Body 为文件内容(ArrayBuffer)
const fs = wx.getFileSystemManager()
const filePath = `${wx.env.USER_DATA_PATH}/downloaded.jpg`
fs.writeFile({
filePath,
data: data.Body,
encoding: 'binary',
success() {
wx.previewImage({ urls: [filePath] })
},
})
}
})
批量上传#
cos.uploadFiles({
Bucket,
Region,
files: [
{ FilePath: 'file1.jpg', Key: 'uploads/file1.jpg' },
{ FilePath: 'file2.jpg', Key: 'uploads/file2.jpg' },
],
SliceSize: 1024 * 1024 * 5,
}, function (err, data) {
if (err) {
console.error('批量上传出错', err)
} else {
console.log('全部上传完成', data.files)
}
})
常见陷阱#
- 域名白皮书:必须在小程序管理后台配置 COS 域名,否则请求会被拦截
- STS 临时密钥路径权限:STS Policy 应限制到具体路径(如
uploads/${openid}/*),防止越权访问 - 大文件超时:小程序 wx.request 超时 60s,大文件上传使用 SliceUploadFile 分片避免超时
- CDN 回源:如配置了 CDN,下载 URL 应使用 CDN 域名而非 COS 直链
- 跨域 CORS:COS 存储桶需配置 CORS 规则,允许小程序来源的请求
生态资源#
后端 STS SDK#
| 语言 | 仓库 |
|---|---|
| Node.js | tencentyun/qcloud-cos-sts-sdk |
| Java | tencentyun/qcloud-cos-sts-sdk-java |
| Python | tencentyun/qcloud-cos-sts-sdk-python |
| Go | tencentyun/qcloud-cos-sts-sdk-go |
相关 SDK#
- cos-js-sdk-v5:Web 浏览器版本
- cos-nodejs-sdk-v5:Node.js 服务端版本
- miniprogram-cos-sdk:轻量化版(仅上传功能)
适用场景#
- 用户头像/图片上传:直接传到 COS,服务端只需签发 STS 密钥
- 文件分享:生成预签名 URL 实现临时下载链接
- 音视频存储:配合腾讯云音视频处理服务(数据万象)实现转码、截图
- 备份同步:小程序本地数据备份到云端
版本更新#
最新版本 v1.8.0(2026-04)#
- 优化分片上传性能
- 修复若干边界条件 Bug
- 改进 STS 密钥缓存逻辑
版本历程#
- v1.7.x:支持自定义请求超时、进度回调增强
- v1.6.x:新增 uploadFiles 批量上传 API
- v1.5.x:引入 STS 临时密钥方案,废弃永久密钥直传
- v1.0.x:初始版本,基础上传/下载功能