Как установить 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": {}
}
]
}