Amazon S3通过网址访问图片

时间:2011-08-07 20:47:26

标签: amazon-s3

我已将图片上传到Amazon S3存储空间。但是如何通过url访问此图像?我已将文件夹和文件设为公开但如果尝试通过网址https://s3.amazonaws.com/bucket/path/image.png

访问它仍会出现AccessDenied错误

12 个答案:

答案 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,如下所示 get object 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();