Mam folder w wiadrze z 10 000 plików. Wygląda na to, że nie ma możliwości ich przesłania i natychmiastowego upublicznienia. Więc przesłałem je wszystkie, są prywatne i muszę je wszystkie upublicznić.
Wypróbowałem konsolę aws, po prostu wyświetla błąd (działa dobrze z folderami z mniejszą liczbą plików).
Próbowałem użyć organizowania S3 w Firefoksie, to samo.
Czy jest jakieś oprogramowanie lub skrypt, który mogę uruchomić, aby wszystko to upublicznić?
amazon-s3
amazon-web-services
PeterV
źródło
źródło
Odpowiedzi:
Możesz wygenerować zasadę zasobnika (patrz przykład poniżej), która daje dostęp do wszystkich plików w zasobniku. Zasady zasobnika można dodać do zasobnika za pośrednictwem konsoli AWS.
Spójrz także na następujące narzędzie do generowania zasad udostępniane przez Amazon.
http://awspolicygen.s3.amazonaws.com/policygen.html
źródło
bucket/avatars/*
. (Nie zapomnij*
o końcu. Zrobiłem to i przez chwilęJeśli przesyłasz po raz pierwszy, możesz ustawić pliki jako publiczne podczas przesyłania w wierszu poleceń:
Jak udokumentowano w Korzystanie z poleceń wysokiego poziomu s3 z interfejsem wiersza poleceń AWS
Niestety, lista ACL jest stosowana tylko podczas przesyłania plików. Nie stosuje (w moich testach) listy ACL do już przesłanych plików.
Jeśli chcesz zaktualizować istniejące obiekty, kiedyś byłeś w stanie zsynchronizować zasobnik ze sobą, ale wydaje się, że przestało to działać.
[Już nie działa] Można to zrobić z wiersza poleceń:
(Więc to już nie odpowiada na pytanie, ale pozostawia odpowiedź w celach informacyjnych, tak jak kiedyś).
źródło
Musiałem zmienić kilkaset tysięcy obiektów. Uruchomiłem instancję EC2, aby to uruchomić, dzięki czemu wszystko działa szybciej.
aws-sdk
Najpierw musisz zainstalować klejnot.Oto kod:
require 'rubygems' require 'aws-sdk' # Change this stuff. AWS.config({ :access_key_id => 'YOURS_HERE', :secret_access_key => 'YOURS_HERE', }) bucket_name = 'YOUR_BUCKET_NAME' s3 = AWS::S3.new() bucket = s3.buckets[bucket_name] bucket.objects.each do |object| puts object.key object.acl = :public_read end
źródło
Miałem ten sam problem, rozwiązanie @DanielVonFange jest przestarzałe, ponieważ nowa wersja SDK jest niedostępna.
Dodawanie fragmentu kodu, który teraz działa dla mnie z AWS Ruby SDK:
źródło
Chciałem tylko dodać, że dzięki nowej konsoli S3 możesz wybrać folder (y) i wybrać,
Make public
aby wszystkie pliki w folderach były publiczne. Działa jako zadanie w tle, więc powinno obsługiwać dowolną liczbę plików.źródło
Korzystanie z 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)}'
źródło
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)}'
Miałem taką potrzebę, ale liczba plików sprawia, że praca seryjna jest DUŻO wolna. Więc napisałem skrypt , który robi to na iron.io „s ślusarz usług. Ich 500 darmowych godzin obliczeniowych miesięcznie wystarczy, aby obsłużyć nawet duże przedziały (a jeśli przekroczysz tę cenę, jest rozsądna). Ponieważ jest to wykonywane równolegle, trwa mniej niż minutę dla 32 000 obiektów, które miałem. Uważam również, że ich serwery działają na EC2, więc komunikacja między zadaniem a S3 jest szybka.
Każdy może wykorzystać mój skrypt do własnych potrzeb.
źródło
Spójrz na BucketExplorer, który bardzo dobrze zarządza operacjami masowymi i jest solidnym klientem S3.
źródło
Można by pomyśleć, że upublicznią domyślne zachowanie, prawda? :) Podzieliłem się twoją frustracją podczas budowania niestandardowego interfejsu API do interfejsu z S3 z rozwiązania C #. Oto fragment kodu, który dokonuje przesłania obiektu S3 i domyślnie ustawia go na publiczny dostęp do odczytu:
Funkcja ToACLString (acl) zwraca public-read , BASE_SERVICE_URL to s3.amazonaws.com, a stała AWS_ACL_HEADER to x-amz-acl . Wtyczka i DreamMessage prawdopodobnie będą wyglądać dziwnie, ponieważ używamy frameworka Dream do usprawnienia naszej komunikacji http. Zasadniczo robimy http PUT z określonymi nagłówkami i specjalną sygnaturą nagłówka zgodnie ze specyfikacjami aws (zobacz tę stronę w dokumentacji aws, aby zapoznać się z przykładami konstruowania nagłówka autoryzacji).
Aby zmienić istniejące listy ACL zawierające 1000 obiektów, można napisać skrypt, ale prawdopodobnie łatwiej jest użyć narzędzia GUI, aby naprawić natychmiastowy problem. Najlepsze, z których do tej pory korzystałem, pochodzi z firmy o nazwie malina moroszka dla S3; wygląda na to, że co najmniej jeden ze swoich produktów ma bezpłatny 15-dniowy okres próbny. Właśnie sprawdziłem, że pozwoli ci to wybrać wiele obiektów jednocześnie i ustawić ich ACL jako publiczną za pomocą menu kontekstowego. Ciesz się chmurą!
źródło