【发布时间】:2022-02-06 23:22:27
【问题描述】:
我目前正在生成一个预签名的 URL 以将对象上传到我的 AWS s3 存储桶
const signedUrl = await s3.getSignedUrl('putObject', params);
这是我的 params 对象:
const params = {
Bucket: 'mybucket',
Key: `mybucketpost-${Math.ceil(Math.random() * 10 ** 10)}.png`,
ContentType: 'image/png',
Metadata: {
ContentType: 'image/png',
},
Expires: 36000
}
我能够成功生成预签名 URL 并将对象上传到我的存储桶,但是当我尝试使用 s3.getSignedUrl 方法访问对象时,会下载对象而不是打开的 png 图像我的浏览器标签。现在,通过我所做的所有研究,我明白为什么会发生这种情况。那是因为我的对象的系统定义的对象元数据Content-Type 仍然是binary/octet-stream。
即使我尝试将要为其生成预签名 url 的对象的 Content-Type 更改为 image/png,它也会被添加为对象 x-amz-meta-contenttype: image/png 的用户生成的元数据。
所以在我的 AWS 控制台中,我上传的对象的元数据是:
System defined Cache-Control no-cache
System defined Content-Type binary/octet-stream
User defined x-amz-meta-contenttype image/png
不幸的是,这并不能解决在浏览器选项卡中加载图像的问题。
我尝试直接通过 AWS 控制台将对象的系统定义元数据 Content-Type 更改为 image/png,并且正如预期的那样,对象 (png) 使用对象 URL 在我的浏览器选项卡中打开,但我已经在使用 putObject 属性生成预签名 URL 时,无法找到使用适用于 Node.js 的 AWS 开发工具包更改系统定义的元数据 Content-Type 的方法。需要你的帮助。谢谢!
【问题讨论】:
标签: node.js amazon-web-services amazon-s3 sdk