遞歸更改 Amazon S3 上給定副檔名的檔案的內容類型

遞歸更改 Amazon S3 上給定副檔名的檔案的內容類型

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

如前所述,您可以使用awsAmazon 的工具並使用 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

相關內容