我已经将一张图片上传到了亚马逊S3存储器,但是如何通过URL访问这张图片呢?我已经将文件夹和文件设置为公共,但是如果尝试通过URL访问仍然会出现AccessDenied错误。 https://s3.amazonaws.com/bucket/path/image.png
String imgUrl=prizes.get(position).getImagePreview().replaceAll("\\s","%20");
Picasso.with(mContext)
.load(imgUrl)
.into(mImageView);
仅是对@akotian答案的补充,您可以通过以下方式点击对象来获取对象URL
并且公开访问时,您可以在将对象上传到存储桶时通过编程方式设置ACL。
例如Java请求示例
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
.contentType(contentType)
.bucket(LOGO_BUCKET_NAME)
.key(LOGO_FOLDER_PREFIX+fileName)
.acl(ObjectCannedACL.PUBLIC_READ)// this make public read
.metadata(metadata)
.build();
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
使用此策略来使该存储桶公开。
添加存储桶策略对我有用
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::yourbucketname/*"
}
]
}
要通过URL访问私有图像,您必须提供查询字符串身份验证。查询字符串身份验证版本4需要X-Amz-Algorithm、X-Amz-Credential、X-Amz-Signature、X-Amz-Date、X-Amz-SignedHeaders和X-Amz-Expires参数。
从您的存储桶内的权限选项卡中关闭阻止公共访问(存储桶设置)。您还需要编辑对象的权限。在Grantee Everyone(公共访问)上提供读取权限。然后勾选“我理解这些更改对此对象的影响。”并保存更改。
尝试通过以下方式访问:
https://s3.amazonaws.com//file.format
或者打开文件并点击“打开”,这样它会将您重定向到正确的路径。
更改您的存储桶... 可能会起作用