Rekursives Ändern des Inhaltstyps für Dateien einer bestimmten Erweiterung auf Amazon S3

Rekursives Ändern des Inhaltstyps für Dateien einer bestimmten Erweiterung auf Amazon S3

Ich habe einen großen S3-Bucket mit einer verschachtelten „Ordner“-Struktur, die (unter anderem) statische .json- und .md-Dateien enthält. Diese Dateien werden von S3 als bereitgestellt, text/plainanstatt der korrekten application/jsonund text/markdown.

Ich habe die Bucket-Standardeinstellungen aktualisiert, damit neue Uploads den richtigen Inhaltstyp haben.

Was ist die beste Möglichkeit, den „Baum“ zu durchlaufen und den Inhaltstyp für Dateien mit einer bestimmten Erweiterung zu aktualisieren?

Antwort1

Hier ist ein Beispiel, wie dies mit dem AWS CLI-Tool geht. Das CP-Tool ermöglicht die Verwendung rekursiver Optionen, was das S3API-Tool meiner Meinung nach nicht kann. In diesem Fall behebe ich eine Reihe von SVGs. Entfernen Sie die Optionen --dryrun, wenn Sie bereit sind, es freizugeben.

aws s3 cp \
      --exclude "*" \
      --include "*.svg" \
      --content-type="image/svg+xml"  \
      --metadata-directive="REPLACE" \
      --recursive \
      --dryrun \
       s3://mybucket/static/ \
       s3://mybucket/static/

Antwort2

Nach einigem Suchen habe ich herausgefunden, dass das s3cmdTool dies kann. So legen Sie beispielsweise JSON-Dateien auf application/json fest:

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

Antwort3

$ aws s3api copy-objectSofern Sie sich nicht mit Boto/Python oder einer anderen AWS-API die Hände schmutzig machen möchten, vermute ich, dass Ihre beste Lösung die Verwendung mit der Flagge ist, --content-typeum ein Objekt in sich selbst zu kopieren und den neuen Inhaltstyp festzulegen.

Hier ist dieDokumentationfür s3api.

Es versteht sich von selbst, dass Sie dies zuerst testen sollten, bevor Sie es rekursiv auf Ihrem gesamten Bucket ausführen.

Antwort4

Wie bereits erwähnt, können Sie awsdas Tool von Amazon und mit s3api Objekte auf sich selbst kopieren und metadata-directive=REPLACEden Inhaltstyp ändern.

Ich füge dies hier ein, weil Sie manchmal Dateinamen durchlaufen möchten, die in der Datenbank gespeichert sind, und so können Sie dies über die Befehlszeile tun.

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

verwandte Informationen