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

时间:2016-02-13 14:04:49

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

我可以将图片从Android上传到亚马逊s3。但它们总是私密的,没有人可以展示它们。我必须在亚马逊s3管理控制台上公开它。上传时,我无法为图像设置ACL。

我了解到,有两种方法可以将图像从Android上传到亚马逊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 个答案:

答案 0 :(得分:1)

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

  <section class="container">
    <div id="card">
      <figure class="front">1</figure>
      <figure class="back">2</figure>
      <!--

        How To Make this a Slideshow?

      <figure class="back">3</figure>
      <figure class="back">4</figure>
      -->
    </div>
  </section>