1

Я могу загружать изображения с Android на Amazon s3. Но они всегда частные, их никто не может отобразить. я должен опубликовать его на консоли управления Amazon s3. Я не могу установить ACL для изображения при его загрузке.Как установить ACL для объекта при загрузке его в Amazon s3?

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

  • с использованием PutObjectRequest
  • с использованием TransferUtility.upload()

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

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

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

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

+1

https://github.com/aws/aws-sdk-android/issues/63 –

ответ

1

Ведровая политика кажется самой простой. Вы можете указать какой-либо путь или предоставить разрешение для всех объектов в вашем ковше. Вы можете установить его с помощью консоли AWS (свойства Bucket -> Permissions -> Edit bucket policy) или CloudBerry Explorer (свойства Bucket -> Bucket Policy). Это подходит для ваших нужд?

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
    { 
     "Sid": "", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::bucketname/*", 
     "Condition": {} 
    } 
    ] 
} 
+0

, что работал. но я хочу задать больше вопросов: я использую firebase и aws s3 вместе. данные пользователя находятся на firebase. могу ли я добавить разрешение для удаления? например, пользователь A загрузил фотографию. все пользователи могут отображать это изображение, но просто пользователь A удаляет или редактирует эту фотографию. как я могу это сделать? – cimenmus

+0

Вы можете создать учетную запись IAM с разрешением на запись и установить политику ведра для всех, как предложено (или другую учетную запись IAM с разрешением на чтение). – Andrew