Вы могли бы подумать, что они сделают публичным чтение поведения по умолчанию, не так ли? :)
Я поделился своим разочарованием при создании пользовательского API для взаимодействия с S3 из решения C #. Вот фрагмент кода, который завершает загрузку объекта S3 и устанавливает его для публичного доступа по умолчанию:
public void Put(string bucketName, string id, byte[] bytes, string contentType, S3ACLType acl) {
string uri = String.Format("https://{0}/{1}", BASE_SERVICE_URL, bucketName.ToLower());
DreamMessage msg = DreamMessage.Ok(MimeType.BINARY, bytes);
msg.Headers[DreamHeaders.CONTENT_TYPE] = contentType;
msg.Headers[DreamHeaders.EXPECT] = "100-continue";
msg.Headers[AWS_ACL_HEADER] = ToACLString(acl);
try {
Plug s3Client = Plug.New(uri).WithPreHandler(S3AuthenticationHeader);
s3Client.At(id).Put(msg);
} catch (Exception ex) {
throw new ApplicationException(String.Format("S3 upload error: {0}", ex.Message));
}
}
Функция ToACLString (acl) возвращает public-read , BASE_SERVICE_URL - s3.amazonaws.com , а константа AWS_ACL_HEADER - x-amz-acl . Плагин и DreamMessage могут показаться вам странными, поскольку мы используем инфраструктуру Dream для оптимизации наших http-коммуникаций. По сути, мы выполняем HTTP PUT с указанными заголовками и специальной подписью заголовка для каждой спецификации AWS (см. Эту страницу в документах aws для примеров того, как создать заголовок авторизации).
Чтобы изменить существующие списки ACL для 1000 объектов, вы можете написать сценарий, но, вероятно, проще использовать инструмент с графическим интерфейсом для решения немедленной проблемы. Лучшее, что я использовал до сих пор, это компания под названием cloudberry для S3; похоже, у них есть бесплатная 15-дневная пробная версия хотя бы для одного из продуктов. Я только что проверил, что это позволит вам выбрать несколько объектов одновременно и установить их ACL для общего доступа через контекстное меню. Наслаждайтесь облаком!