1

我可以將圖像從Android上傳到Amazon s3。但他們總是私密的,沒有人能展示他們。我必須在Amazon S3管理控制檯上公開它。上傳圖片時,我無法爲圖片設置ACL。如何在將對象上傳到Amazon s3時爲其設置ACL?

我瞭解到,有兩種方法可以從Android的圖像上傳到Amazon S3:

  • 使用PutObjectRequest
  • 使用TransferUtility.upload()

我都嘗試。如果我更喜歡PutObjectRequest,我必須使用AsyncTask或其他線程。因爲PutObjectRequest在主線程上運行。但我不想使用AsyncTask或其他線程。

我想使用TransferUtility,因爲它不在主線程上運行,在服務上工作,所以我不必使用AsyncTask或其他線程。我也可以輕鬆跟蹤進度和轉移狀態。另外,TransferUtility比PubObjectRequest更新。但問題出現在這裏:我不知道如何在將對象上傳到s3的時候爲對象設置ACL。我試過:

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

但它返回「網絡主線程」錯誤。所以我需要使用AsyncTask或其他線程。但我不想使用AsyncTask或其他線程。如何在使用TransferUtility上傳對象時如何設置ACL?

+1

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

回答

1

桶策略似乎是最簡單的事情。您可以指定某個路徑或爲您的存儲桶中的所有對象授予權限。 您可以使用AWS控制檯(存儲桶屬性 - >權限 - >編輯存儲桶策略)或CloudBerry Explorer(存儲桶屬性 - >存儲桶策略)對其進行設置。 它適合您的需求嗎?

{ 
    "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

相關問題