我想创建一个自定义内容类型的签名网址,我正在尝试:
s3.getSignedUrl('getObject', {Bucket: AWS_BUCKET_NAME, Key: 'myObjectsKey', ContentType: 'image/png'}, function (err, url) {
console.log(err, url);
});
但是,这会产生错误:
{ [UnexpectedParameter: Unexpected key 'ContentType' found in params]
message: 'Unexpected key \'ContentType\' found in params',
code: 'UnexpectedParameter',
time: Thu Dec 18 2014 01:38:19 GMT-0400 (AST) }
,我觉得很奇怪,因为这里关于签名请求的文档:
http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
声明签名是通过散列生成的:
签名= URL编码(Base64(HMAC-SHA1(您的保密访问密钥ID,UTF-8编码(字符串到签名))));
StringToSign = HTTP-VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Expires + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;
,它允许您指定内容类型。
这是怎么回事?
2条答案
按热度按时间wfauudbj1#
这一定已经被更新了,因为你现在可以这样做了,只需要使用
ResponseContentType
而不是ContentType
。我甚至用Saz files测试了它,效果很好。
sq1bmfud2#
内容类型不是签名URL的一部分。必须在S3中的对象上设置它。这可以在上载时完成(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property),也可以使用新的内容类型将对象复制到自身(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property)。