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/plain
anstatt der korrekten application/json
und 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 s3cmd
Tool 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-object
Sofern 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-type
um 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 aws
das Tool von Amazon und mit s3api Objekte auf sich selbst kopieren und metadata-directive=REPLACE
den 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