text/plain
我有一个大型 S3 存储桶,其中嵌套了“文件夹”结构,其中包含静态 .json 和 .md 文件(以及其他文件)。S3 以而不是正确的application/json
和 的形式提供这些文件text/markdown
。
我已更新存储桶默认值,以便新上传的内容具有正确的内容类型。
遍历“树”并更新与特定扩展名匹配的文件的内容类型的最佳方法是什么?
答案1
以下是使用 aws cli 工具执行此操作的示例。cp 工具允许使用递归选项,我认为 s3api 工具无法做到这一点。在本例中,我正在修复一堆 SVG。当您准备好释放它时,请删除 --dryrun 选项。
aws s3 cp \
--exclude "*" \
--include "*.svg" \
--content-type="image/svg+xml" \
--metadata-directive="REPLACE" \
--recursive \
--dryrun \
s3://mybucket/static/ \
s3://mybucket/static/
答案2
经过一番挖掘,我发现该s3cmd
工具可以做到这一点。例如,要将 JSON 文件设置为 application/json:
s3cmd --recursive modify --acl-public \
--add-header='content-type':'application/json' \
--exclude '' --include '.json' \
s3://bucket/
答案3
除非您想亲自使用 boto/python 或其他 AWS API,否则我认为最好的选择是使用$ aws s3api copy-object
标志--content-type
将对象复制到自身,并设置新的内容类型。
这是文档对于 s3api。
不用说,您应该先对此进行测试,然后再在整个存储桶上递归运行它。
答案4
如前所述,您可以使用aws
亚马逊的工具并使用 s3api 将对象复制到其自身上,然后用它metadata-directive=REPLACE
来更改内容类型。
我把它放在这里,因为有时您可能想要迭代存储在数据库中的文件名,这就是您可以通过 cli 执行此操作的方法。
aws s3api copy-object \
--content-type="application/vnd.android.package-archive" \
--metadata-directive="REPLACE" \
--copy-source "MYBUCKET/FILE.apk" \
--bucket "MYBUCKET" \
--key "FILE.apk" \
--acl public-read