如何在将对象上传到 Amazon s3 时为其设置 ACL?
how to set ACL for an object while uploading it to Amazon s3?
我可以将图像从 Android 上传到 Amazon s3。但它们始终是私有的,没有人可以展示它们。我必须在 Amazon s3 管理控制台上将其设置为 public。我无法在上传图像时为图像设置 ACL。
我了解到,有两种方法可以将图像从 Android 上传到 Amazon s3:
- 使用 PutObjectRequest
- 使用 TransferUtility.upload()
我都试过了。如果我更喜欢 PutObjectRequest,我必须使用 AsyncTask 或其他线程。因为 PutObjectRequest 运行s 在主线程上。但我不想使用 AsyncTask 或其他线程。
我想使用 TransferUtility,因为它不在主线程上 运行,在服务上工作,所以我不必使用 AsyncTask 或其他线程。我也可以轻松跟踪进度和传输状态。此外,TransferUtility 比 PubObjectRequest 更新。但是问题来了:我不知道如何在将对象上传到 s3 时或之前为它设置 ACL。我试过了:
s3Client.setObjectAcl("myBucket", "steve_jobs.jpg", CannedAccessControlList.PublicRead);
但它返回 "network on main thread" 错误。所以我需要使用 AsyncTask 或另一个 thread.but 我不想使用 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。但它们始终是私有的,没有人可以展示它们。我必须在 Amazon s3 管理控制台上将其设置为 public。我无法在上传图像时为图像设置 ACL。
我了解到,有两种方法可以将图像从 Android 上传到 Amazon s3:
- 使用 PutObjectRequest
- 使用 TransferUtility.upload()
我都试过了。如果我更喜欢 PutObjectRequest,我必须使用 AsyncTask 或其他线程。因为 PutObjectRequest 运行s 在主线程上。但我不想使用 AsyncTask 或其他线程。
我想使用 TransferUtility,因为它不在主线程上 运行,在服务上工作,所以我不必使用 AsyncTask 或其他线程。我也可以轻松跟踪进度和传输状态。此外,TransferUtility 比 PubObjectRequest 更新。但是问题来了:我不知道如何在将对象上传到 s3 时或之前为它设置 ACL。我试过了:
s3Client.setObjectAcl("myBucket", "steve_jobs.jpg", CannedAccessControlList.PublicRead);
但它返回 "network on main thread" 错误。所以我需要使用 AsyncTask 或另一个 thread.but 我不想使用 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": {}
}
]
}