Ви могли б подумати, що вони будуть публічно читати поведінку за замовчуванням, чи не так? :) Я поділився вашим розчаруванням під час створення власного 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) повертає загальнодоступне читання , BASE_SERVICE_URL - це s3.amazonaws.com, а константа AWS_ACL_HEADER - x-amz-acl . Штепсель та матеріали DreamMessage, мабуть, здадуться вам дивними, оскільки ми використовуємо фреймворк Dream для впорядкування наших комунікацій http. По суті, ми робимо http PUT із зазначеними заголовками та спеціальним підписом заголовка відповідно до специфікацій aws (див. Цю сторінку в документації aws для прикладів того, як побудувати заголовок авторизації).
Щоб змінити існуючі 1000 об’єктів ACL, ви можете написати сценарій, але, мабуть, простіше скористатися інструментом графічного інтерфейсу, щоб вирішити негайну проблему. Найкраще, що я використовував дотепер, - від компанії під назвою морошка для S3; схоже, вони мають безкоштовну 15-денну пробну версію принаймні для одного з своїх продуктів. Я щойно перевірив, що це дозволить вам вибрати декілька об’єктів одночасно та встановити їх ACL загальнодоступним через контекстне меню. Насолоджуйтесь хмарою!