У меня в ведре папка с 10 000 файлов. Кажется, нет возможности загрузить их и сразу же опубликовать. Я загрузил их все, они частные, и мне нужно сделать их общедоступными.
Пробовал консоль aws, просто выдает ошибку (отлично работает с папками с меньшим количеством файлов).
Я пробовал использовать организацию S3 в Firefox, то же самое.
Есть ли какое-нибудь программное обеспечение или какой-нибудь сценарий, который я могу запустить, чтобы сделать все это общедоступным?
Ответы:
Вы можете создать политику корзины (см. Пример ниже), которая дает доступ ко всем файлам в корзине. Политику корзины можно добавить в корзину через консоль AWS.
Также посмотрите следующий инструмент генератора политик, предоставленный Amazon.
http://awspolicygen.s3.amazonaws.com/policygen.html
источник
bucket/avatars/*
. (Не забывайте*
в конце. Я сделал и некоторое время бегал по кругу.)Если вы загружаете в первый раз, вы можете сделать файлы общедоступными при загрузке в командной строке:
Как описано в разделе Использование команд s3 высокого уровня с интерфейсом командной строки AWS
К сожалению, ACL применяется только тогда, когда файлы загружены. Он (в моем тестировании) не применяет ACL к уже загруженным файлам.
Если вы действительно хотите обновить существующие объекты, раньше вы могли синхронизировать ведро с самим собой, но, похоже, это перестало работать.
[Больше не работает] Это можно сделать из командной строки:
(Так что это больше не отвечает на вопрос, но оставляю ответ для справки, поскольку раньше он работал.)
источник
Пришлось поменять несколько сотен тысяч объектов. Я запустил инстанс EC2, чтобы запустить это, что ускоряет работу.
aws-sdk
Сначала вы захотите установить драгоценный камень.Вот код:
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
источник
У меня была такая же проблема, решение @DanielVonFange устарело, так как новая версия SDK отсутствует.
Добавление фрагмента кода, который сейчас работает у меня с AWS Ruby SDK:
источник
Просто хотел добавить, что с новой консолью S3 вы можете выбрать свои папки и
Make public
сделать все файлы внутри папок общедоступными. Он работает как фоновая задача, поэтому должен обрабатывать любое количество файлов.источник
Используя 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)}'
источник
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)}'
Если бы это было нужно мне, но количество файлов делает его ПУТЬ медленно делать в последовательном режиме. Поэтому я написал сценарий , который делает это на iron.io «s металлист службы. Их 500 бесплатных часов вычислений в месяц достаточно, чтобы обрабатывать даже большие сегменты (и если вы превысите это количество, то цена будет разумной). Поскольку это делается параллельно, для 32 000 объектов, которые у меня были, он завершается менее чем за минуту. Также я считаю, что их серверы работают на EC2, поэтому связь между заданием и S3 происходит быстро.
Любой желающий может использовать мой скрипт для собственных нужд.
источник
Взгляните на BucketExplorer, он очень хорошо управляет массовыми операциями и является надежным клиентом S3.
источник
Вы могли бы подумать, что они обнародуют поведение по умолчанию, не так ли? :) Я поделился вашим разочарованием при создании пользовательского API для взаимодействия с S3 из решения C #. Вот фрагмент, который выполняет загрузку объекта S3 и по умолчанию устанавливает для него общий доступ для чтения:
Функция ToACLString (acl) возвращает общедоступное чтение , BASE_SERVICE_URL - s3.amazonaws.com, а константа AWS_ACL_HEADER - x-amz-acl . Подключаемые модули и DreamMessage могут показаться вам странными, поскольку мы используем фреймворк Dream для оптимизации наших HTTP-коммуникаций. По сути, мы выполняем HTTP PUT с указанными заголовками и специальной подписью заголовка в соответствии со спецификациями aws (см. Эту страницу в документации aws для примеров того, как создать заголовок авторизации).
Чтобы изменить существующие списки управления доступом к 1000 объектам, вы можете написать сценарий, но, вероятно, проще использовать инструмент с графическим интерфейсом, чтобы исправить немедленную проблему. Лучшее, что я использовал до сих пор, принадлежит компании под названием cloudberry for S3; похоже, что у них есть бесплатная 15-дневная пробная версия по крайней мере для одного из своих продуктов. Я только что проверил, что это позволит вам выбрать сразу несколько объектов и сделать их ACL общедоступными через контекстное меню. Наслаждайтесь облаком!
источник