流程:后台创造一个临时密钥传给前端

在前端vue中通过npm安装cos的依赖

npm i cos-js-sdk-v5 --save

然后在需要用的页面引用cos

var COS = require('cos-js-sdk-v5');

我用的是后台传的临时密钥,但是阅读文档使用例子

<input id="file-selector" type="file">
<script src="dist/cos-js-sdk-v5.min.js"></script>
<script>
var Bucket = 'examplebucket-1250000000';
var Region = 'ap-beijing';

// 初始化实例
var cos = new COS({
    getAuthorization: function (options, callback) {
        // 异步获取临时密钥
        $.get('http://example.com/server/sts.php', {
            bucket: options.Bucket,
            region: options.Region,
        }, function (data) {
            var credentials = data.credentials;
            callback({
                 TmpSecretId: credentials.tmpSecretId, 
                 TmpSecretKey: credentials.tmpSecretKey, 
                 XCosSecurityToken: credentials.sessionToken, 
                 ExpiredTime: data.expiredTime
            });
        });
    }
});

// 接下来可以通过 cos 实例调用 COS 请求。
// TODO

</script>

文档中提示初始化COS对象的时候要用到getAuthorization,其实是不需要的!
在使用后台返回的临时密钥的时候
直接使用一下代码

this.cos = new COS({
              SecretId: res.ret_data.tmpSecretId,
              SecretKey: res.ret_data.tmpSecretKey,
              XCosSecurityToken: res.ret_data.sessionToken,
 });

这里直接用临时密钥来代替固定密钥,XCosSecurityToken也是必传的。

在使用getAuthorization的时候,我发现根本没进这个函数内部,并且在控制台打印出来的cos实例有如下错误:
前端错误
查找之后发现是这个函数不能使用严格模式"use strict",但是cos的js文件里又是明显使用了"use strict",感觉自相矛盾了。

总之,使用

this.cos = new COS({
              SecretId: res.ret_data.tmpSecretId,
              SecretKey: res.ret_data.tmpSecretKey,
              XCosSecurityToken: res.ret_data.sessionToken,
 });

这种通过测试发现没有问题!!

Logo

前往低代码交流专区

更多推荐