Saya memiliki folder dalam ember dengan 10.000 file. Sepertinya tidak ada cara untuk mengupload dan langsung mempublikasikannya. Jadi saya mengupload semuanya, semuanya pribadi, dan saya harus menjadikannya publik.
Saya sudah mencoba konsol aws, itu hanya memberikan kesalahan (berfungsi dengan baik dengan folder dengan lebih sedikit file).
Saya sudah mencoba menggunakan pengorganisasian S3 di Firefox, hal yang sama.
Apakah ada beberapa perangkat lunak atau skrip yang dapat saya jalankan untuk menjadikan semua ini publik?
amazon-s3
amazon-web-services
PeterV
sumber
sumber
Jawaban:
Anda dapat membuat kebijakan keranjang (lihat contoh di bawah) yang memberikan akses ke semua file di dalam keranjang. Kebijakan bucket dapat ditambahkan ke bucket melalui konsol AWS.
Lihat juga alat pembuat kebijakan berikut yang disediakan oleh Amazon.
http://awspolicygen.s3.amazonaws.com/policygen.html
sumber
bucket/avatars/*
. (Jangan lupa*
pada akhirnya. Saya lakukan dan saya berlari berputar-putar untuk sementara waktu.)Jika Anda mengupload untuk pertama kali, Anda dapat menyetel file menjadi publik saat mengupload di baris perintah:
Seperti yang didokumentasikan dalam Menggunakan Perintah s3 Tingkat Tinggi dengan Antarmuka Baris Perintah AWS
Sayangnya itu hanya berlaku ACL saat file diunggah. Itu tidak (dalam pengujian saya) menerapkan ACL ke file yang sudah diunggah.
Jika Anda benar-benar ingin memperbarui objek yang sudah ada, Anda biasanya dapat menyinkronkan keranjang ke dirinya sendiri, tetapi tampaknya ini telah berhenti bekerja.
[Tidak berfungsi lagi] Ini dapat dilakukan dari baris perintah:
(Jadi ini tidak lagi menjawab pertanyaan, tetapi meninggalkan jawaban untuk referensi seperti dulu.)
sumber
Saya harus mengubah beberapa ratus ribu objek. Saya menjalankan instans EC2 untuk menjalankan ini, yang membuat semuanya berjalan lebih cepat. Anda akan ingin memasang
aws-sdk
permata terlebih dahulu.Berikut kodenya:
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
sumber
Saya memiliki masalah yang sama, solusi oleh @DanielVonFange sudah usang, karena versi baru SDK sudah keluar.
Menambahkan cuplikan kode yang cocok untuk saya sekarang dengan AWS Ruby SDK:
sumber
Hanya ingin menambahkannya dengan Konsol S3 baru Anda dapat memilih folder Anda dan memilih
Make public
untuk membuat semua file di dalam folder menjadi publik. Ini berfungsi sebagai tugas latar belakang sehingga harus menangani sejumlah file.sumber
Menggunakan 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)}'
sumber
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)}'
Sempat ini perlu sendiri tapi banyaknya file membuatnya JAUH lambat untuk dilakukan secara serial. Jadi saya menulis naskah yang melakukan itu pada iron.io 's barang besi layanan. 500 jam komputasi gratis mereka per bulan sudah cukup untuk menangani bucket yang besar (dan jika Anda melebihi itu, harganya masuk akal). Karena dilakukan secara paralel, penyelesaiannya dalam waktu kurang dari satu menit untuk 32.000 objek yang saya miliki. Saya juga yakin server mereka berjalan pada EC2 sehingga komunikasi antara pekerjaan dan S3 cepat.
Siapa saja boleh menggunakan skrip saya untuk kebutuhan mereka sendiri.
sumber
Lihat BucketExplorer yang mengelola operasi massal dengan sangat baik dan merupakan Klien S3 yang solid.
sumber
Anda akan berpikir mereka akan membuat publik membaca perilaku default, bukan? :) Saya membagikan rasa frustrasi Anda saat membangun API khusus untuk berinteraksi dengan S3 dari solusi C #. Berikut ini cuplikan yang menyelesaikan pengunggahan objek S3 dan menyetelnya ke akses baca publik secara default:
Fungsi ToACLString (acl) mengembalikan bacaan publik , BASE_SERVICE_URL adalah s3.amazonaws.com dan konstanta AWS_ACL_HEADER adalah x-amz-acl . Plug dan item DreamMessage kemungkinan akan terlihat aneh bagi Anda karena kami menggunakan kerangka Dream untuk merampingkan komunikasi http kami. Pada dasarnya kami melakukan PUT http dengan header yang ditentukan dan tanda tangan header khusus sesuai spesifikasi aws (lihat halaman ini di dokumen aws untuk contoh bagaimana membuat header otorisasi).
Untuk mengubah 1000 objek ACL yang sudah ada, Anda dapat menulis skrip tetapi mungkin lebih mudah menggunakan alat GUI untuk segera memperbaiki masalah. Yang terbaik yang pernah saya gunakan sejauh ini adalah dari perusahaan bernama cloudberry untuk S3; tampaknya mereka memiliki uji coba gratis selama 15 hari untuk setidaknya satu produk mereka. Saya baru saja memverifikasi bahwa itu akan memungkinkan Anda untuk memilih beberapa objek sekaligus dan mengatur ACL mereka ke publik melalui menu konteks. Selamat menikmati cloud!
sumber