腾讯云COS上传文件-官网踩坑

本文记录了在使用腾讯云COS(对象存储服务)JavaScript SDK时遇到的一个隐晦bug,即在初始化COS对象时使用getAuthorization函数可能导致上传文件时出现问题。解决方案是直接通过SecretId、SecretKey和XCosSecurityToken实例化COS对象,避免了因重复创建实例引发的错误。此方法可帮助开发者更稳定地进行文件上传操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先贴出官网的上传Demo

第一步: 实例化一个COS对象。 (这个对象可以用来操作后续的上传,下载等操作)

var COS = require('cos-js-sdk-v5');
var cos = new COS({
   // 必选参数
   getAuthorization: function (options, callback) {
       // 服务端 JS 和 PHP 例子:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/
       // 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk
       // STS 详细文档指引看:https://cloud.tencent.com/document/product/436/14048
       $.get('http://example.com/server/sts.php', {
           // 可从 options 取需要的参数
       }, function (data) {
           var credentials = data && data.credentials;
           if (!data || !credentials) return console.error('credentials invalid');
           callback({
               TmpSecretId: credentials.tmpSecretId,
               TmpSecretKey: credentials.tmpSecretKey,
               XCosSecurityToken: credentials.sessionToken,
               // 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
               StartTime: data.startTime, // 时间戳,单位秒,如:1580000000
               ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000900
           });
       });
   }
});

第二步:用实例化的COS对象去上传文件

cos.putObject({
   Bucket: 'examplebucket-1250000000', /* 必须 */
   Region: 'COS_REGION',     /* 存储桶所在地域,必须字段 */
   Key: 'exampleobject',              /* 必须 */
   StorageClass: 'STANDARD',
   Body: fileObject, // 上传文件对象
   onProgress: function(progressData) {
       console.log(JSON.stringify(progressData));
   }
}, function(err, data) {
   console.log(err || data);
});

官网的第二步是没问题的 。

然后:

第一步存在一个比较隐晦的bug 某些情况下会遇到,如果你和我一样,折腾半天官网文档依旧无效,并且打debugger还发现进入第二步上传函数时候,COS突然回头又去创建一个新的COS实例 你可以参考我的写法:

将 第一步 改为:

  // 初始化实例 *** d 为后端接口传入的临时秘钥信息
          const cos = new COS({
            SecretId: d.tmpSecretId,
            SecretKey: d.tmpSecretKey,
            XCosSecurityToken: d.token
          });

也就是说 :
第一步 不要使用 getAuthorization 这个函数
直接new一个cos对象即可 我猜大概原因是因为后端创建临时秘钥时候已经生成了一个cos实例 这时候再用这个秘钥去getAuthorization会导致重复 所以后续上传会出现奇怪的bug

这个吐血的bug折腾我差不多一天 记录一下 转载请注明出处
https://blog.youkuaiyun.com/GGGyp/article/details/114525747

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值