参考官方文档《获取请求预签名 URL》,写出以下代码片段来获取URL,但是一直获取的就是一个拼出的不带签名的链接。

var url = cos.getObjectUrl({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
});

执行结果

https://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/dfsdfsd

期望结果

https://examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/dfsdfsd?q-sign-algorithm=sha1&q-ak=AKIDZwVmUDGxOmlYxydVjz051eU1IbAfZtYfxfrKudgDliKFJO6infDw4bqndvutKmF_&q-sign-time=1645942939;1645946539&q-key-time=1645942939;1645946539&q-header-list=&q-url-param-list=&q

解决方案

不能取cos.getObjectUrl返回值,要用回调。返回值永远是那个不带签名的url,但如果使用固定签名来获取,就会成功。这里设计不太合理。还不如直接返回null 。

cos.getObjectUrl({
    Bucket: 'examplebucket-1250000000', /* 填入您自己的存储桶,必须字段 */
    Region: 'COS_REGION',  /* 存储桶所在地域,例如ap-beijing,必须字段 */
    Key: '1.jpg',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
    Sign: false
}, function (err, data) {
    console.log(err || data.Url);
});

另外阿里云的《微信小程序直传实践》封装成npm包会更方便一些。