腾讯云对象存储,PHP与JS对接版本

这几天使用了一下腾讯云的COS对象存储服务,发现在使用中遇到了一些问题,在此记录下来,一是做个记录,二是希望以我的经验帮助到其他的人。

1、PHP与JS基本使用指南

在我使用腾讯云的COS对象存储服务时,其已经出了V4版本的了;因此之后的内容都是基于V4版本之上的。PHP与JS的基本使用,个人觉得其GITHUB上的文档基本可以理解了;但是在JS上还是出现了问题。
PHPSDK的地址:https://github.com/tencentyun/cos-php-sdk-v4。
JSSDK的地址:https://github.com/tencentyun/cos-js-sdk-v4。

2、JS上的问题

之前在使用其JSSDK时,一开始想测试其单独使用时是否可以使用,便使用了其给的样例,直接给到其Key进行加密。但是使用其样例中的代码:
(PS:这些问题都是前端小伙伴们遇到的)
var self = this;
                    var random = parseInt(Math.random() * Math.pow(2, 32));
                    var now = parseInt(new Date().getTime() / 1000);
                    var e = now + 60; //签名过期时间为当前+60s
                    var path = '';//多次签名这里填空
                    var str = 'a=' + self.appid + '&k=' + sid + '&e=' + e + '&t=' + now + '&r=' + random +
                            '&f=' + path + '&b=' + self.bucket;
                    var sha1Res = CryptoJS.HmacSHA1(str, skey);//这里使用CryptoJS计算sha1值,你也可以用其他开源库或自己实现
                    var strWordArray = CryptoJS.enc.Utf8.parse(str);
                    var resWordArray = sha1Res.concat(strWordArray);
                    var res = resWordArray.toString(CryptoJS.enc.Base64);
                    setTimeout(function () {//setTimeout模拟一下网络延迟的情况
                        callback(encodeURIComponent(res));
                    }, 1000);
但是,这样使用就报错了,记忆中是ERROR_PROXY_APPID_USERID_NOTMATCH错误,感觉很是不可思议,觉得自己已经把自己的appid, key等东西都写死在这个程序里了,怎么会出现这个错误,然后上网搜索,发现有人提到要将self.appid与self.bucket去掉;然后去掉了,果然不报这个错误了,该为另一个错误, 变成了签名过期的错误。 很是莫名其妙的。然后查了好多时间都没有发现问题在哪里。

3、JS与PHP前后端对接

PHP端的接口我用时还没有发现什么错误,但是当前端小伙伴和我说其JS测试失败了,我就准备使用PHP生成密钥发给JS,然后上传看能不能成功。
V4对应的文档应该是:https://www.qcloud.com/document/product/436。(本人一开始看错文档了)
文档清楚的介绍了签名算法的实现,但是PHPSDK中已经有了实现了。其在 中的auth.php,我使用的是: createReusableSignature($expiration, $bucket, $filepath = null)方法,很简单,只要传入三个参数就可以生成签名。
于是可以利用JS中的样例访问你生成签名的接口,获得签名后就可以进行操作了。但是在这里我又失败了,出现了一个莫名的错误:fileId不匹配的问题。然后就很困惑。因为这里都没有让我们填fileId的相关事务。
于是之后我又仔细看了看JS的上传接口:
cos.uploadFile(successCB, errorCB, progressCB, bucket, myFolder + 'test1.zip', file, 1);
发现一个问题,就是在这里填写了一个我们的文件路径了,然后在PHP生成密钥当中是不是就该不填$filepath的值了,于是我就将其$filepath取默认的null。然后就成功了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值