我有一個大型 S3 儲存桶,帶有嵌套的“資料夾”結構,其中包含(除其他外)靜態 .json 和 .md 檔案。這些文件由 S3 提供,text/plain
而不是正確的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
Amazon 的工具並使用 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