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