Как установить ACL для объекта при загрузке его в Amazon s3?

Я могу загрузить изображения с Android на Amazon S3. Но они всегда приватны, никто не может их отобразить. Я должен сделать это общедоступным на консоли управления Amazon S3. Я не могу установить ACL для изображения при загрузке.

Я узнал, что есть два способа загрузить изображение в Amazon s3 с Android:

  • используя PutObjectRequest
  • используя TransferUtility.upload()

Я попробовал оба. если я предпочитаю PutObjectRequest, я должен использовать AsyncTask или другой поток. Потому что PutObjectRequest работает в основном потоке. Но я не хочу использовать AsyncTask или другой поток.

я хочу использовать TransferUtility, потому что он не работает в основном потоке, работает в сервисе, поэтому мне не нужно использовать AsyncTask или другой поток. Также я могу легко отслеживать прогресс и состояние передачи. Кроме того, TransferUtility является более новым, чем PubObjectRequest. Но проблема возникает здесь: я не знаю, как установить ACL для объекта во время или до загрузки его на s3. я попробовал это:

s3Client.setObjectAcl("myBucket", "steve_jobs.jpg", CannedAccessControlList.PublicRead);

но он вернул ошибку "сеть в главном потоке". Поэтому мне нужно использовать AsyncTask или другой поток. Но я не хочу использовать AsyncTask или другой поток. Как я могу установить ACL для объекта при загрузке его с помощью TransferUtility?

1 ответ

Решение

Политика ведра кажется самой простой вещью. Вы можете указать какой-либо путь или дать разрешение для всех объектов в вашем ведре. Вы можете установить его с помощью консоли AWS (Свойства корзины -> Разрешения -> Изменить политику корзины) или CloudBerry Explorer (Свойства корзины -> Политика корзины). Это подходит для ваших нужд?

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucketname/*",
      "Condition": {}
    }
  ]
}
Другие вопросы по тегам