我正在尝试通过预签名的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类型或类似的内容?
谢谢您的帮助
答案 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 } });