gpt4 book ai didi

python - Amazon S3 使用内容类型 header 有何用途?

转载 作者:太空宇宙 更新时间:2023-11-03 16:46:00 25 4
gpt4 key购买 nike

所以我有一个 python Web 应用程序,它可以获取用户上传的图像并使用 boto3 将它们推送到 S3 中进行存储,如下所示:

s3.Object(BUCKET_NAME, filename).put(Body=file_obj.read(), ContentType="image/*")

我的印象是,您需要在上传时指定正确的内容类型(即 image/jpeg、image/bmp 等),否则 S3 将无法正确处理文件,但这似乎并非如此案例。

我使用“image/*”内容类型测试了它,并且根本没有内容类型,一切似乎都工作正常 - 图像上传和存储正常,并且重新下载时它们没有损坏或任何东西。

到目前为止,我看到的唯一区别是,如果没有内容类型,您的 Web 浏览器将下载文件,而不是在新选项卡中显示图像(使用 S3 管理控制台时)

这个结论正确吗?内容类型仅决定浏览器如何处理相关文件,还是 S3 将其用于其他用途?

最佳答案

你是对的。

S3 不使用 Content-Type 进行任何操作。

正如您所注意到的,用户代理(浏览器)是需要提供(并且正确)信息的地方。

还有其他一些类似的内容,例如 Content-EncodingCache-ControlExpiresContent-Disposition —— S3 只是在获取对象时将这些内容与响应一起返回,以方便浏览器。这些不会改变 S3 行为。

还有一个interesting capability for GET requests使用预签名 URL,您可以要求 S3 覆盖存储的值并在响应中返回不同的内容。查询字符串中包含 response-content-type=application/octet-stream签名 URL 将触发 S3 返回 Content-Type: application/octet-stream 对于该单个响应,无论您在 S3 中存储了什么。

只有 x-amz-* header ,排除那些匹配 x-amz-meta-* 的 header 实际上会导致 S3 的行为变化,例如 x-amz-aclx-amz-storage-class

<小时/>

还有一些其他 header 打破了这种一般模式,也许值得单独提及:

X-Robots-Tag 似乎完全没有文档记录,但在上传时也被接受并通过每个 GET 返回到浏览器,因此这里的行为很像 Content-Type 和上面提到的 friend 。 S3 不会据此采取任何行动。此 header 用于向行为良好的爬虫发出信号,类似于 /robots.txt。常见的值为 X-Robots-Tag: noindex, nofollow(不索引此页面,不关注此页面上的链接)。每次下载都会返回此 header ,但只能通过 API 设置。它在控制台中可见,但无法使用控制台进行设置或编辑。据我所知,这是一个隐秘的功能,完全没有记录。

Content-MD5 是随上传一起发送的可选(但强烈推荐)请求 header 。它包含请求正文的二进制 md5,以 base64 编码。当您获取对象时,不会返回此 header ,但用于验证上传是否未损坏。如果请求正文与此哈希不匹配,则上传会被 S3 拒绝并出现错误,并且永远不会保存。

关于python - Amazon S3 使用内容类型 header 有何用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36301483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com