对于这个API, 文档上是这样说的:
Get Service接口实现获取该用户下所有Bucket列表。该API接口需要使用Authorization签名认证,且只能获取签名中AccessID所属账户的Bucket列表。
事实并非如此,getService 仅能获取到默认项目下的Bucket列表,无法获取到用户自己创建的项目下的Bucket列表。
此API的必要参数有Bucket、Region、Key,ContentLength,以及Body, 由API源文件中的代码 var readStream = body;
可知,Body的类型是readStream, 故
var params = {
Bucket : 'STRING_VALUE', //your bucket name
Region : 'STRING_VALUE', //your region
Key : 'STRING_VALUE', //file name,
ContentLength : 'STRING_VALUE', //file length
Body : 'readStream' //your file
}
由于文件的长度是必要参数,而浏览器中的content-length是整个请求的长度。为了解决文件长度问题,引入nodejs的busboy模块来完成文件上传。
文件上传成功后,腾讯云只返回了一个ETag,需要自己拼接文件的url。
完整的文件url是<BucketName>-<AppID>.<Region>.myqcloud.com/<fileName>?sign=
,签名如何生成可以参考文档中“签名算法”,根据文档可知,使用的是HMAC-SHA1算法。可以使用github上的开源库或者自己实现。
这里还有一个简便的方法,腾讯云对象存储在github中的demo中完成了sign生成,直接引入自己的项目即可。
对于相同名字的文件,新的文件会覆盖旧的文件,如果不希望旧的文件被覆盖,需要在文件名字后面加上后缀,来保证文件名的唯一,可以使用uuid来作为后缀。