我正在尝试通过预签名的 url 将图像上传到我的 S3 存储桶。一切正常,除了当我点击该图像的公共 URL 时,浏览器会下载它而不是显示它。当我从 AWS 控制台上传相同的图像时,一切正常,图像显示在浏览器中。
这里我是怎么做的:
生成预签名 URL:
s3.getSignedUrl('putObject', {
Bucket: myBucket,
Key: myKey,
Expires: signedUrlExpireSeconds
})
Run Code Online (Sandbox Code Playgroud)
使用 axios 上传文件:
const response = await axios.put(url, formElement.files[0])
Run Code Online (Sandbox Code Playgroud)
我是否应该在过程中的某处配置标头以告诉 S3 我正在上传的内容的 MIME 类型或类似的内容?
感谢您的帮助
有两个地方可以做到这一点。
如果您提前知道图像的类型,那么您可以ContentType在s3.getSignedUrl参数中明确设置。这是因为这些参数将被编码并与签名的 put 请求一起传递:getSignedUrl docs / putObject docs。例如:
s3.getSignedUrl('putObject', {
Bucket: myBucket,
Key: myKey,
Expires: signedUrlExpireSeconds,
ContentType: 'image/png'
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以Content-Type在 Axios 请求REST PUT docs上设置标头,例如:
const response = await axios.put(
url,
formElement.files[0],
{ headers: { 'Content-Type': formElement.files[0].type } });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4289 次 |
| 最近记录: |