【问题标题】:how to set ACL for an object while uploading it to Amazon s3?如何在将对象上传到 Amazon s3 时为其设置 ACL?
【发布时间】:2016-05-24 16:20:55
【问题描述】:

我可以将图像从 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?

【问题讨论】:

标签: android amazon-web-services amazon-s3 awss3transferutility


【解决方案1】:

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

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

【讨论】:

  • 那行得通。但我想问更多问题:我一起使用 firebase 和 aws s3。用户数据在 firebase 上。我可以添加删除权限吗?例如用户 A 上传了一张照片。所有用户都可以显示该图像,但只有用户 A 删除或编辑该照片。我怎样才能做到?
  • 您可以创建具有写入权限的 IAM 帐户,并按照建议为每个人设置存储桶策略(或其他具有读取权限的 IAM 帐户)。
猜你喜欢
  • 2022-11-09
  • 2015-04-19
  • 2014-11-05
  • 2017-03-09
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
相关资源
最近更新 更多