2

我可以将图像从 Android 上传到 Amazon s3。但它们始终是私有的,没有人可以展示它们。我必须在 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?

4

1 回答 1

2

桶策略似乎是最简单的事情。您可以为存储桶中的所有对象指定一些路径或授予权限。您可以使用 AWS 控制台(存储桶属性 -> 权限 -> 编辑存储桶策略)或 CloudBerry Explorer(存储桶属性 -> 存储桶策略)进行设置。是否适合您的需要?

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucketname/*",
      "Condition": {}
    }
  ]
}
于 2016-02-16T13:55:05.783 回答