Ich habe einen Ordner in einem Eimer mit 10.000 Dateien. Es scheint keine Möglichkeit zu geben, sie hochzuladen und sofort öffentlich zu machen. Also habe ich sie alle hochgeladen, sie sind privat und ich muss sie alle öffentlich machen.
Ich habe die aws-Konsole ausprobiert, sie gibt nur einen Fehler aus (funktioniert gut mit Ordnern mit weniger Dateien).
Ich habe versucht, S3 in Firefox zu organisieren.
Gibt es eine Software oder ein Skript, das ich ausführen kann, um all diese öffentlich zu machen?
amazon-s3
amazon-web-services
PeterV
quelle
quelle
Antworten:
Sie können eine Bucket-Richtlinie generieren (siehe Beispiel unten), die den Zugriff auf alle Dateien im Bucket ermöglicht. Die Bucket-Richtlinie kann über die AWS-Konsole zu einem Bucket hinzugefügt werden.
Schauen Sie sich auch das folgende von Amazon bereitgestellte Tool zur Richtliniengenerierung an.
http://awspolicygen.s3.amazonaws.com/policygen.html
quelle
bucket/avatars/*
. (Vergessen Sie das*
am Ende nicht. Ich habe es getan und bin eine Weile im KreisWenn Sie zum ersten Mal hochladen, können Sie festlegen, dass die Dateien beim Hochladen in der Befehlszeile öffentlich sind:
Wie unter Verwenden von s3-Befehlen auf hoher Ebene mit der AWS-Befehlszeilenschnittstelle dokumentiert
Leider wird die ACL nur angewendet, wenn die Dateien hochgeladen werden. Die ACL wird (in meinen Tests) nicht auf bereits hochgeladene Dateien angewendet.
Wenn Sie vorhandene Objekte aktualisieren möchten, konnten Sie den Bucket früher mit sich selbst synchronisieren, dies scheint jedoch nicht mehr zu funktionieren.
[Funktioniert nicht mehr] Dies kann über die Befehlszeile erfolgen:
(Dies beantwortet also nicht mehr die Frage, sondern lässt die Antwort als Referenz, wie es früher funktioniert hat.)
quelle
Ich musste mehrere hunderttausend Objekte wechseln. Ich habe eine EC2-Instanz gestartet, um dies auszuführen, wodurch alles schneller geht. Sie möchten
aws-sdk
zuerst den Edelstein installieren .Hier ist der Code:
quelle
Ich hatte das gleiche Problem, die Lösung von @DanielVonFange ist veraltet, da die neue Version des SDK nicht mehr verfügbar ist.
Hinzufügen eines Code-Snippets, das derzeit für mich mit AWS Ruby SDK funktioniert:
quelle
Ich wollte nur hinzufügen, dass Sie mit der neuen S3-Konsole Ihre Ordner auswählen und auswählen können
Make public
, um alle Dateien in den Ordnern öffentlich zu machen. Es funktioniert als Hintergrundaufgabe und sollte daher eine beliebige Anzahl von Dateien verarbeiten.quelle
Verwenden der cli:
aws s3 ls s3://bucket-name --recursive > all_files.txt && grep .jpg all_files.txt > files.txt && cat files.txt | awk '{cmd="aws s3api put-object-acl --acl public-read --bucket bucket-name --key "$4;system(cmd)}'
quelle
aws s3 ls s3://bucket-name --recursive | grep .jpg | awk '{cmd="aws s3api put-object-acl --acl public-read --bucket bucket-name --key "$4;system(cmd)}'
Werfen Sie einen Blick auf BucketExplorer es Bulk - Operationen sehr gut verwaltet und ist ein solides S3 - Client.
quelle
Hatte das ich selbst gebraucht, aber die Anzahl der Dateien macht es viel zu langsam, um seriell zu tun. Also habe ich ein Skript geschrieben , das dies im IronWorker - Dienst von iron.io tut . Die 500 kostenlosen Rechenstunden pro Monat reichen aus, um auch große Eimer zu bewältigen (und wenn Sie diese überschreiten, ist der Preis angemessen). Da es parallel ausgeführt wird, ist es für die 32.000 Objekte, die ich hatte, in weniger als einer Minute abgeschlossen. Ich glaube auch, dass ihre Server auf EC2 laufen, so dass die Kommunikation zwischen dem Job und S3 schnell ist.
Jeder kann mein Skript für seine eigenen Bedürfnisse verwenden.
quelle
Sie würden denken, sie würden das Standardverhalten öffentlich lesen lassen, nicht wahr? :) Ich habe Ihre Frustration beim Erstellen einer benutzerdefinierten API für die Schnittstelle mit S3 aus einer C # -Lösung geteilt. Hier ist das Snippet, mit dem ein S3-Objekt hochgeladen und standardmäßig auf öffentlich lesbaren Zugriff gesetzt wird:
Die ToACLString (acl) -Funktion gibt public-read zurück , BASE_SERVICE_URL ist s3.amazonaws.com und die AWS_ACL_HEADER-Konstante ist x-amz-acl . Das Plug- und DreamMessage-Material wird für Sie wahrscheinlich seltsam aussehen, da wir das Dream-Framework verwenden, um unsere http-Kommunikation zu optimieren. Im Wesentlichen führen wir einen http-PUT mit den angegebenen Headern und einer speziellen Headersignatur gemäß aws-Spezifikationen durch (siehe diese Seite in den aws-Dokumenten Beispiele zum Erstellen des Autorisierungsheaders finden ).
Um vorhandene 1000 Objekt-ACLs zu ändern, können Sie ein Skript schreiben, aber es ist wahrscheinlich einfacher, ein GUI-Tool zu verwenden, um das unmittelbare Problem zu beheben. Das Beste, was ich bisher verwendet habe, stammt von einer Firma namens Cloudberry für S3. Es sieht so aus, als hätten sie eine kostenlose 15-Tage-Testversion für mindestens eines ihrer Produkte. Ich habe gerade überprüft, dass Sie damit mehrere Objekte gleichzeitig auswählen und ihre ACL über das Kontextmenü auf öffentlich setzen können. Genieße die Wolke!
quelle