尽管存储桶是公共的,但 Amazon S3 base64 图像不适用于 og:image 标签

Posted

技术标签:

【中文标题】尽管存储桶是公共的,但 Amazon S3 base64 图像不适用于 og:image 标签【英文标题】:Amazon S3 base64 Image is not working on og:image tags though bucket is public 【发布时间】:2022-01-15 00:48:18 【问题描述】:

请给我一些指导以解决下面列出的问题。

我在用于获取图像的 og 标记上遇到问题。我正在使用带有 Razzle 的 React 进行服务器端渲染。所有站点图像都存储在 aws 存储桶中,该存储桶具有公共访问权限以获取图像。

这些是我通过 Helmet 在特定页面下使用的标签。

<Helmet>
          <title>this.props.data.title+" | by "+this.props.data.username </title>
          /* facebook open graph tags */
          <meta data-rh="true" property="og:locale" content="en_US" />
          <meta data-rh="true" property="og:url" content="http://somedomain.com/view/Some title of the post" />
          <meta data-rh="true" property="og:title" content="Some title of the post" />
          <meta data-rh="true" property="og:type" content="article" />
          <meta data-rh="true" property="og:description" content="Description of the post" />
          <meta property="og:image" content="https://s3.ap-south-1.amazonaws.com/bucketname/somerandomnameofimage.png" />
          <meta property="og:site_name" content="SiteName" />  
        </Helmet>

经过一些发现后,我在 og 标签 url 中使用了来自 google 的随机图像并且工作正常,但是当我对相同图像或不同图像使用 s3 存储桶链接时它不起作用。

我在想的是它不会获取 aws s3 图像。但如果是这样,那么其他人会怎么做。

我检查了许多网站的 og 标签,发现它们会使用一些 subdomain.domain.com/someimagename.extension,如果这是唯一的情况,那么我如何实现这一点。我的问题是,如果我们必须像古老的编程方式那样使用图像托管服务提供商,为什么还要使用它。

请建议我如何解决这个问题。 非常感谢任何帮助或建议。

更新 我对此进行了深入研究,发现图像会出现一些问题,因为我的图像是通过 Base 64 图像从 FE 上传到后端的。后端将该图像上传到 s3。

我已经通过 curl 命令检查了我的图片 URL,即

curl -i "mybucket-imageurl"

我发现的等等

HTTP/1.1 200 OK
x-amz-id-2: ***********************************************************
x-amz-request-id: ****************
Date: Mon, 13 Oct 2020 08:37:31 GMT
Last-Modified: ************************
ETag: "*********************"
Content-Encoding: base64
x-amz-version-id: ***********************
Accept-Ranges: bytes
Content-Type: image/jpeg
Server: AmazonS3
Content-Length: 1095517

然后我直接在亚马逊 S3 上上传了一张图片,并使用了该网址并获取了 og:image。 卷曲响应是

HTTP/1.1 200 OK
x-amz-id-2: ***********************************************************
x-amz-request-id: ****************
Date: Mon, 13 Oct 2020 08:37:31 GMT
Last-Modified: ************************
ETag: "*********************"
x-amz-version-id: ***********************
Accept-Ranges: bytes
Content-Type: image/png
Server: AmazonS3
Content-Length: 569666

我检查了上面的响应没有内容编码列。

任何人都可以建议我该怎么做,因为在我的存储桶上大约有 500 多张图片是由 base 64 上传的并且有同样的问题。

什么是最好和最有效的方法来做到这一点

【问题讨论】:

【参考方案1】:

没有人推荐我真的很糟糕。

那么我的发现和解决我的问题的解决方案是,当我们将 base64 图像从服务器上传到 s3 时,图像上会附加一个标题

content-encoding: base64

我们需要从 s3 上的图像中删除它。经过测试,它现在显示在 og 标签上。

【讨论】:

以上是关于尽管存储桶是公共的,但 Amazon S3 base64 图像不适用于 og:image 标签的主要内容,如果未能解决你的问题,请参考以下文章

访问 Amazon S3 公共存储桶

我应该如何在 Amazon S3 上配置“阻止公共访问”?

Amazon S3 存储桶策略只允许访问特定的 http

从 iOS 应用上传到 Amazon S3

Loki 配置与 s3

在 Amazon S3 中将在 aws3 存储桶中创建的文件夹设为公共或私有文件夹