uniapp腾讯云直传如何实现

在uniapp中如何实现腾讯云直传功能?需要配置哪些参数,有没有完整的代码示例可以参考?上传过程中遇到跨域问题该如何解决?

2 回复

使用uni-app实现腾讯云直传,步骤如下:

  1. 前端获取临时密钥(建议通过后端接口获取,避免暴露SecretKey)
  2. 安装cos-js-sdk-v5依赖
  3. 初始化COS实例,配置临时密钥
  4. 调用putObject方法上传文件
  5. 处理上传进度和回调

注意:前端直传需配置CORS,密钥要通过后端获取保证安全。


在 UniApp 中实现腾讯云直传(直接上传文件到腾讯云对象存储 COS),可以避免文件先经过服务器,提升上传效率和节省带宽。以下是实现步骤和示例代码:

实现步骤

  1. 准备工作

    • 开通腾讯云 COS 服务,创建存储桶(Bucket),获取 SecretIdSecretKeyBucket 名称和 Region
    • 安装 COS SDK:在 UniApp 项目中引入 cos-wx-sdk-v5(适用于微信小程序环境,H5 可使用 cos-js-sdk-v5)。
  2. 前端直传逻辑

    • 使用 UniApp 的文件选择 API(如 uni.chooseImage)选择文件。
    • 通过 COS SDK 直接上传文件到腾讯云 COS,需在客户端临时计算签名(仅测试用,生产环境应由后端生成签名)。
  3. 安全签名(重要):

    • 生产环境中,签名应由后端生成,前端通过接口获取,避免暴露 SecretKey

示例代码(以微信小程序为例)

// 1. 安装并引入 COS SDK
// 使用 npm:npm install cos-wx-sdk-v5
// 或直接复制 SDK 文件到项目,通过 require 引入
const COS = require('./lib/cos-wx-sdk-v5.js');

// 2. 初始化 COS 实例
const cos = new COS({
  getAuthorization: function (options, callback) {
    // 生产环境:请求后端接口获取临时密钥(推荐)
    // 示例中直接使用固定密钥(仅测试,不安全!)
    const authorization = COS.getAuthorization({
      SecretId: 'YOUR_SECRET_ID', // 替换为你的 SecretId
      SecretKey: 'YOUR_SECRET_KEY', // 替换为你的 SecretKey
      Method: 'POST',
      Key: options.Key, // 文件路径
      Expires: 60, // 签名有效期(秒)
    });
    callback(authorization);
  }
});

// 3. 选择并上传文件
function uploadToCOS() {
  // 选择文件(以图片为例)
  uni.chooseImage({
    count: 1,
    success: (res) => {
      const filePath = res.tempFilePaths[0];
      const key = 'uploads/' + Date.now() + '_' + Math.random().toString(36).substr(2); // 生成唯一文件名

      // 调用 COS SDK 上传
      cos.postObject({
        Bucket: 'YOUR_BUCKET_NAME', // 替换为你的 Bucket
        Region: 'YOUR_REGION',      // 替换为你的 Region,如 ap-beijing
        Key: key,
        FilePath: filePath,
        onProgress: function (info) {
          console.log('上传进度:', info.percent);
        }
      }, function (err, data) {
        if (err) {
          console.error('上传失败:', err);
          uni.showToast({ title: '上传失败', icon: 'none' });
        } else {
          console.log('上传成功:', data.Location);
          uni.showToast({ title: '上传成功' });
        }
      });
    }
  });
}

注意事项

  • 安全签名:务必通过后端接口获取临时密钥,避免前端暴露 SecretKey
  • 跨域配置:在 COS 控制台为 Bucket 设置 CORS 规则,允许前端域名。
  • 文件路径:上传时指定文件的 COS 路径(Key),可自定义目录结构。
  • H5 适配:若需支持 H5,需使用 cos-js-sdk-v5,并处理浏览器环境的上传逻辑。

精简总结

通过 COS SDK 实现直传,核心是初始化 SDK 并处理签名。务必用后端生成签名保障安全,前端仅负责文件选择和上传操作。

回到顶部