无法在浏览器中查看 S3 中的图像

siv*_*a R 3 permissions amazon-s3 amazon-web-services

我的目标是将jpg文件上传到s3存储桶,我已经使用boto3库完成了。

上传的图片文件

当我尝试使用显示的链接在 s3 存储桶中打开该文件时,我遇到了错误。

错误:

此 XML 文件似乎没有任何与之关联的样式信息。文档树如下所示。

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>7C702F46589DF223</RequestId>
    <HostId>
       /CbLJfLthWd2n6br7m1fkSy3W71yyKMWavtOxk/8h/afUr3w09cXl5e1eU8lppXSP7AU90jbymE=
     </HostId>
</Error>  
Run Code Online (Sandbox Code Playgroud)

编辑 1: 按照@CaffeinatedCod3r建议的答案后,我收到以下错误。

在此处输入图片说明

Suk*_*djf 7

看起来您正在尝试在浏览器中查看图像。

为此,你需要

  1. 打开S3你的对象AWS
  2. 转到S3对象的属性。
  3. 转到Metadata部分。
  4. 将有一个名为 的属性Content-Type。它的初始值可能是binary/stream. 将其更改为图像类型image/jpegimage/png 或者application/pdf(如果您正在处理 pdf 文件)等。

现在您应该能够在浏览器选项卡中查看图像或文件,而不是下载。


Caf*_*d3r 6

在使用生成的 Web URL 下载文件之前,您需要使用“存储桶策略”工具应用公共权限。
要应用存储桶策略,请执行以下步骤:

  1. 打开 S3 管理控制台https://console.aws.amazon.com/s3/
  2. 选择一个存储桶,点击“权限”,点击“存储桶策略”。
  3. 使用 AWS 策略生成器应用策略。

您必须申请 的政策GetObject
注意:这将为所有获得链接的人授予下载权限。

示例策略如下所示

{
"Id": "PolicyID",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "StmtID",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<YOUR_BUCKET_NAME>",
      "Principal": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在 @mondyfy 回答后编辑政策将是

   {
      "Id": "PolicyID",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "StmtID",
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::<YOUR_BUCKET_NAME>/*",
          "Principal": "*"
        }
      ]
    }
Run Code Online (Sandbox Code Playgroud)