我已将图片上传到Amazon S3存储空间。但是如何通过url访问此图像?我已将文件夹和文件设为公开但如果尝试通过网址https://s3.amazonaws.com/bucket/path/image.png
访问它仍会出现AccessDenied错误答案 0 :(得分:26)
这是一个较旧的问题,但对于遇到此问题的任何人来说,一旦我公开了该文件,我就能够以https://mybucket.s3.amazonaws.com/myfolder/afile.jpg
的形式访问我的图片答案 1 :(得分:6)
您可以使用以下方式访问您的图片:
https://s3.amazonaws.com/bucketname/foldername/imagename.jpg
或如果没有文件夹,您可以执行以下操作:
https://s3.amazonaws.com/bucketname/imagename.jpg
upvote如果有帮助。它符合2017年5月30日的现有AWS。
答案 2 :(得分:5)
现在您可以简单地右键单击存储桶中的任何文件夹,然后选择“公开”以将该文件夹中的所有内容公开。它可能无法在桶级别本身工作。
答案 3 :(得分:3)
确保使用与上传并存储在S3上相同的大小写来访问图像。 例如,如果您上传了image_name。 JPG ,则应使用相同的名称,但不能使用image_name。 jpg
答案 4 :(得分:3)
我在寻找无法访问图像的类似问题的解决方案时遇到了这个问题。
事实证明,文件名中包含%
的图片在访问时必须将%
符号网址编码为%25
。
即。需要通过photo%20of%20a%20banana%20-%2019%20june%202016.jpg
访问photo%2520of%2520a%2520banana%2520-%252019%2520june%25202016.jpg
。
但是,编码完整路径的URL对我们不起作用,因为斜杠等会被编码,并且路径不起作用。在我们的具体情况下,只需在所有访问路径中将%
替换为%25
即可。
答案 5 :(得分:3)
就我而言,我已经私下上传了图片,因此无法访问。我确实遵循以下代码
const AWS = require('aws-sdk')
const myBucket = 'BUCKET_NAME'
const myKey = 'FILE_NAME.JPG'
const signedUrlExpireSeconds = 60 * 1
const s3 = new AWS.S3({
accessKeyId: "ACCESS_KEY_ID",
signatureVersion: 'v4',
region: 'S3_REGION',
secretAccessKey: "ACCESS_SECRET"
});
const url = s3.getSignedUrl('getObject', {
Bucket: myBucket,
Key: myKey,
Expires: signedUrlExpireSeconds
})
console.log(url)
答案 6 :(得分:1)
我遇到了同样的问题。我有问题图像网址中的间距。我这样做是为了让它发挥作用:
String imgUrl=prizes.get(position).getImagePreview().replaceAll("\\s","%20");
现在将此网址传递给毕加索:
Picasso.with(mContext)
.load(imgUrl)
.into(mImageView);
答案 7 :(得分:1)
在您的控制台上,右键单击要访问的图像,然后单击“公开”;完成后,再次右键单击图像并单击“属性”,然后从“扩展”视图中复制“链接”。
答案 8 :(得分:1)
为了将来参考,如果您想访问 Amazon S3 中的文件,URL 需要类似于:
fatal error: gwindow.h: No such file or directory
bucketname.s3.region.amazonaws.com/foldername/image.png
不要忘记将对象设置为公开。
在 S3 中,如果您单击对象,您会看到一个名为:对象 URL 的字段。这是对象的网址。
答案 9 :(得分:0)
最简单的方法之一就是制定存储桶策略。
{ “ Version”:“ 2012-10-17”, “声明”:[{ “ Sid”:“ MakeItPublic”, “效果”:“允许”, “ Principal”:“ ”, “ Action”:“ s3:GetObject”, “资源”:“ arn:aws:s3 ::: yourbucketname.com / ” }] }
答案 10 :(得分:0)
要通过URL访问私有图像,您必须提供查询字符串身份验证。查询字符串身份验证版本4需要X-Amz-Algorithm,X-Amz-Credential,X-Amz-Signature,X-Amz-Date,X-Amz-SignedHeaders和X-Amz-Expires参数。
答案 11 :(得分:0)
只是添加到@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();