【问题标题】:Detect Content-Type/MIME Type of an S3 Object检测 S3 对象的 Content-Type/MIME 类型
【发布时间】:2016-12-11 23:17:40
【问题描述】:

我正在向客户端应用程序发送一个由我的服务器使用 S3 SDK 生成的预签名 URL。我无法首先决定该 URL 是用于上传 MP4 视频还是 JPG 图像(因此在预签名的 URL 中没有设置 Content-Type)。

稍后我需要在客户端(NodeJS - React Native)上下载该文件。

有没有办法确定 S3 对象的文件格式(不基于文件名),然后能够使用正确的标签(在这种情况下,<img><video>)查看它?

非常感谢

编辑:我一直在想,也许客户端可以在上传时自行设置内容类型?我不确定我是否会被 S3 拒绝访问,因为 Content-Type 不会在预签名的 URL 中定义。这样我可以在下载时知道数据类型。那行得通吗? (明天试试)

【问题讨论】:

  • 也许您可以向客户端发送两个预签名的 URL,一个用于 MP4,一个用于 JPG,并让客户端使用与内容类型相关的 URL?
  • 为了安全起见,我希望给客户尽可能少的选择。此外,它对 AWS API 的调用次数是其两倍,但不确定限制和计费
  • 生成签名 URL 是一项本地操作——它不涉及对 AWS API 的任何调用。签名 URL 生成是在运行创建签名 URL 的代码的机器上完成的。
  • 我的错;这实际上是有道理的。我仍然不喜欢给用户 2 个 url 的想法,以防他使用坏的那个做一些黑客攻击。

标签: node.js http amazon-web-services amazon-s3 react-native


【解决方案1】:

我建议在 PUT 上设置内容类型。但是,当使用签名 URL 时,您可以覆盖 content-type 和 content-disposition。

S3 RESTObjectGET API

例子:

https://my.examplesite.com/some/path/file.jpg?response-content-type=image/jpeg&response-content-disposition=attachment;%20filename="coolcat.jpg"

重要提示:“Content-type”应位于“Content-Disposition”之前,如上例所示。此外,这些查询字符串值不包含在签名生成中,它们是在生成签名后添加到 URL 中的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 2011-01-14
    • 2019-09-13
    • 2019-03-29
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多