javascript 当在s3 aws中为一个对象创建一个签名的url时,我如何设置内容类型?

yeotifhr  于 2023-02-18  发布在  Java
关注(0)|答案(2)|浏览(105)

我想创建一个自定义内容类型的签名网址,我正在尝试:

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;

,它允许您指定内容类型。
这是怎么回事?

wfauudbj

wfauudbj1#

这一定已经被更新了,因为你现在可以这样做了,只需要使用ResponseContentType而不是ContentType

const params = {
  Bucket: bucket, 
  Key: key, 
  Expires: 60, 
  ResponseContentType: 'image/png'
};

s3.getSignedUrl('getObject', params, function (err, url) {
  if (url) callback(null, url);
  else     callback(err, null);
});

我甚至用Saz files测试了它,效果很好。

sq1bmfud

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)。

相关问题