(とりわけ)静的.jsonファイルと.mdファイルを含むネストされた「フォルダ」構造を持つ大きなS3バケットがあります。これらのファイルは、正しいtext/plain
およびapplication/json
ではなくtext/markdown
としてS3によって提供されています。
新しいアップロードに正しいコンテンツタイプが含まれるように、バケットのデフォルトを更新しました。
「ツリー」をたどり、特定の拡張子に一致するファイルのコンテンツタイプを更新する最良の方法は何ですか?
これは、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/
Boto/pythonまたは別のAWS APIを使用して手を汚したくない限り、$ aws s3api copy-object
を--content-type
フラグと一緒に使用してオブジェクトをそれ自体にコピーし、新しいコンテンツを設定することをお勧めしますタイプ。
これがs3apiの documentation です。
言うまでもなく、バケット全体で再帰的に実行する前に、まずこれをテストする必要があります。
少し掘り下げた後、s3cmd
ツールはこれを行うことができます。たとえば、JSONファイルをapplication/jsonに設定するには:
s3cmd --recursive modify --acl-public \
--add-header='content-type':'application/json' \
--exclude '' --include '.json' \
s3://bucket/
前述のように、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