web-dev-qa-db-ja.com

Amazon S3の特定の拡張子のファイルのコンテンツタイプを再帰的に変更する

(とりわけ)静的.jsonファイルと.mdファイルを含むネストされた「フォルダ」構造を持つ大きなS3バケットがあります。これらのファイルは、正しいtext/plainおよびapplication/jsonではなくtext/markdownとしてS3によって提供されています。

新しいアップロードに正しいコンテンツタイプが含まれるように、バケットのデフォルトを更新しました。

「ツリー」をたどり、特定の拡張子に一致するファイルのコンテンツタイプを更新する最良の方法は何ですか?

12
Gabriel Bauman

これは、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/
25
t1m0

Boto/pythonまたは別のAWS APIを使用して手を汚したくない限り、$ aws s3api copy-object--content-typeフラグと一緒に使用してオブジェクトをそれ自体にコピーし、新しいコンテンツを設定することをお勧めしますタイプ。

これがs3apiの documentation です。

言うまでもなく、バケット全体で再帰的に実行する前に、まずこれをテストする必要があります。

3
EEAA

少し掘り下げた後、s3cmdツールはこれを行うことができます。たとえば、JSONファイルをapplication/jsonに設定するには:

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

前述のように、Amazonの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
3
gilm