ネストされた「フォルダ」構造を持つ大きな S3 バケットがあり、その中には静的な .json ファイルと .md ファイルなどが含まれています。これらのファイルは、text/plain
正しい および ではなく、application/json
としてS3 によって提供されています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