amazon-s3 - S3 使用预签名 URL 上传和提供图像
问题描述
我正在尝试通过预签名的 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 类型或类似的东西?
感谢您的帮助
解决方案
有两个地方可以做到这一点。
如果您提前知道图像的类型,那么您可以ContentType
在s3.getSignedUrl
参数中显式设置。这是因为这些参数将被编码并与签名的 put 请求一起传递:getSignedUrl docs / putObject docs。例如:
s3.getSignedUrl('putObject', {
Bucket: myBucket,
Key: myKey,
Expires: signedUrlExpireSeconds,
ContentType: 'image/png'
});
或者,您可以Content-Type
在 Axios 请求REST PUT docs上设置标头,例如:
const response = await axios.put(
url,
formElement.files[0],
{ headers: { 'Content-Type': formElement.files[0].type } });
推荐阅读
- sql - 如何在 Hive 中的 Array 类型的字段中插入一行?
- java - 有没有办法使用 AccessibilityService 在对话框中单击超链接?
- php - 来自 3rd 方网站的 Wordpress 程序化登录
- php - Xampp localhosting 站点,如何在没有子域“localhost/home = localhost”的情况下将站点放在 localhost 上
- java - 为一个请求禁用基本身份验证(Spring Security)并为所有任何请求禁用
- python - 在使用 RotatingFileHandler Python 时避免登录 strdout 和 stderr
- c++ - 为模板指定有效继承
- javascript - 循环增加范围以从服务器下载图像后的Javascript延迟
- javascript - 使用同义词在字典中查找描述的有效方法
- python - Kivy 在每侧锚定两个小部件