如何通过API更改S3的Content-Type元数据?

0

【以下的问题经过翻译处理】 这份文档清楚地表明您可以更改对象的元数据。通过控制台可以正常工作。但我无法弄清楚您应该如何通过API完成它。

我有一个之前被问过的问题:CloudFront由S3存储桶提供支持,如果内容类型错误,它会执行错误操作。当我上传一个xyz.js文件时,它将内容标记为“text/plain”。我是通过各种客户端,包括旧版的s3cmd来做到这一点的。我可以在s3cmd命令行上指定类型,但我不特别希望这样做-我正在尝试让其他人更轻松地做到这一点。

我正在尝试进行S3 - Lambda通知,分两步完成:

1.收到S3CreateEvent时,在该bucket / key上执行HeadObjectCommand以获取当前元数据。 2.在该响应中,查看GetObjectCommandOutput.Metadata是否有一个键"content-type"。如果是,是否匹配?如果不匹配,执行CopyObjectCommand,但我设置了ContentType和Metadata:{"content-type":"text/javascript"}

问题在于,我从元数据中从未找到使用键“Content-Type”,“content-type”或“contentType”的现有内容类型。我猜我可以每次都执行CopyObjectCommand,但最好先进行检查,避免任何递归。我不清楚CopyObjectCommand是否会触发另一个通知,但一个测试让我相信它确实会。

对于我来说,如果您上传.js文件,则默认内容类型似乎为text/plain仍然很奇怪。事实上,在s3控制台中,它出现在两个位置:类型:js,以及在元数据中显示“系统生成,内容类型,text/plain”。

如果我使用aws s3 cp junk2.js s3://mybucketname --content-type="text/javascript",它会执行正确的操作。

这个问题在 stackoverflow 上讨论得很多,但它主要只是解决方法。没有明确的答案。

profile picture
专家
已提问 5 个月前53 查看次数
1 回答
0

【以下的回答经过翻译处理】 您是否尝试查找“ContentType”?请参阅:Interface HeadObjectCommandOutput

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则