S3使用预先签名的URL上传和投放图片

时间:2018-10-20 09:23:08

标签: amazon-s3

我正在尝试通过预签名的URL将图像上传到我的S3存储桶。一切运行正常,但当我单击该图像的公共URL时,浏览器将其下载而不显示。当我从AWS控制台上载相同的图像时,一切正常,该图像会显示在浏览器中。

这是我的操作方式:

生成预签名URL:

s3.getSignedUrl('putObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds
})

使用axios上传文件:

const response = await axios.put(url, formElement.files[0])

我是否应该在过程中的某处配置标头,以告诉S3我要上传的内容的MIME类型或类似的内容?

谢谢您的帮助

1 个答案:

答案 0 :(得分:2)

您可以在两个地方执行此操作。

如果您提前知道图像的类型,则可以在ContentType参数中显式设置s3.getSignedUrl。这是因为这些参数将与签名的放置请求getSignedUrl docs / putObject docs一起编码和传递。例如:

s3.getSignedUrl('putObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds,
    ContentType: 'image/png'
});

或者,您可以在Axios请求REST PUT docs上设置Content-Type标头,例如:

const response = await axios.put(
  url,
  formElement.files[0],
  { headers: { 'Content-Type': formElement.files[0].type } });