▶_MiniApp Toolkit

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 Stars196⭐
Forks463
npm 版本数67(latest: 1.8.0)
周下载量~2,600
最后推送2026-04-23
许可证MIT
创建年份2017

设计规范#

架构设计#

SDK 采用前端 + 后端协作的安全架构:

code
小程序前端 ──→ COS 存储桶
     ↑                    ↑
     │                    │
  STS 临时密钥 ←── 后端签名服务
     ↑
腾讯云 STS API
  • 前端(SDK):负责文件选择、上传、下载等操作
  • 后端(STS):生成临时密钥返回给前端,控制权限范围和有效期
  • COS:存储和分发文件,可配合 CDN 加速

安全要点#

  1. 切勿在前端硬编码 SecretId / SecretKey
  2. 使用 STS 临时密钥,设置最小权限(仅允许操作指定 Bucket 和路径)
  3. 临时密钥有效期建议 30 分钟~2 小时
  4. 后端签名服务应加入用户身份验证

审核规范#

前置要求#

  • 需要注册腾讯云账号并完成实名认证
  • 创建 COS 存储桶(选择合适的地域)
  • 配置 CORS 跨域规则(允许小程序域名访问)

小程序域名白名单#

在微信公众平台 → 开发管理 → 服务器域名中添加:

  • request 合法域名https://sts.tencentcloudapi.com(STS 临时密钥)
  • uploadFile / downloadFile 合法域名https://<bucket>.cos.<region>.myqcloud.com

开发指南#

安装#

code
# 方式一:npm 安装(推荐)
npm install cos-wx-sdk-v5

# 方式二:直接引入 JS 文件
# 将 cos-wx-sdk-v5.js 复制到项目 lib/ 目录

基础用法:上传文件#

code
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)
      }
    })
  },
})

下载文件#

code
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] })
      },
    })
  }
})

批量上传#

code
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)
  }
})

常见陷阱#

  1. 域名白皮书:必须在小程序管理后台配置 COS 域名,否则请求会被拦截
  2. STS 临时密钥路径权限:STS Policy 应限制到具体路径(如 uploads/${openid}/*),防止越权访问
  3. 大文件超时:小程序 wx.request 超时 60s,大文件上传使用 SliceUploadFile 分片避免超时
  4. CDN 回源:如配置了 CDN,下载 URL 应使用 CDN 域名而非 COS 直链
  5. 跨域 CORS:COS 存储桶需配置 CORS 规则,允许小程序来源的请求

生态资源#

后端 STS SDK#

相关 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:初始版本,基础上传/下载功能