android - 将对象上传到 Amazon s3 时如何为其设置 ACL?

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

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

最佳答案

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

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

关于android - 将对象上传到 Amazon s3 时如何为其设置 ACL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380872/

相关文章:

amazon-web-services - AWS ELB 根据子域进行不同的路由

javascript - RXJS ^5.3.0 与 AWS JS SDK

postgresql - 将大数据从 PostgreSQL 导出到 AWS s3

django - 经验丰富的 Web 开发人员如何将 Django 部署到 EC2 上的生产环境中?

android - Facebook - SingleInstance Activity 上的 LoginFragment

android - 使用大量内存的矢量绘图

android - 两个 Android Studio 安装上的相同证书指纹?

android - 如何修复挂起的 PhoneGap .apk 版本?

amazon-web-services - 如何使用 AWS CLI 从 Elastic Container Registry 镜像创建 lambda 函数?

c# - 我可以使用 AWS 开发工具包监控 S3 下载的进度吗?