recursion地更改Amazon S3上给定扩展的文件的内容types

我有一个嵌套“文件夹”结构的大型S3存储桶,其中包含静态.json和.md文件。 这些文件由S3以text/plain而不是正确的application/jsontext/markdown

我已更新存储分区的默认设置,以便新的上传将具有正确的内容types。

走“树”并更新匹配某个扩展名的文件的内容types的最好方法是什么?

这里是一个例子,如何使用aws cli工具来做到这一点。 cp工具允许使用recursion选项,我不认为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/ 

除非你想用boto / python或其他AWS API弄脏你的双手,否则我怀疑你最好的办法是使用带有--content-type标志的$ aws s3api copy-object将一个对象复制到自己,设置新的内容types。

这是s3api的文档 。

不用说,你应该先testing一下,然后在你的整个桶里recursion地运行它。

如前所述,您可以使用Amazon的aws工具,并使用s3api将对象复制到自身,并使用metadata-directive=REPLACE更改内容types。

我把这个放在这里,因为有时你会想要迭代存储在数据库中的文件名,这就是你如何通过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 

经过一番挖掘,我发现s3cmd工具可以做到这一点。 例如,要将JSON文件设置为application / json:

 s3cmd --recursive modify --acl-public \ --add-header='content-type':'application/json' \ --exclude '' --include '.json' \ s3://bucket/