如何确定没有扩展名的 AWS S3 托管文件的文件类型?

How does one determine the filetype on an AWS S3 hosted file without the extension?

例如,我目前正在使用表单将项目直接上传到 S3 存储桶。在测试时,我没有指定任何预期的文件名或扩展名。

我上传了一个直接生成这个的 .png link:

https://s3-us-west-2.amazonaws.com/easyhighlighting2/2015-07-271438019663927upload94788

当我将它放在 img 标签中时,它会正确显示在网页上。

我的问题是,如果没有扩展名,我的浏览器如何知道它加载的文件类型?在存储桶内,文件的元数据甚至都没有填写。

有没有办法以编程方式获取该文件扩展名?

我准备尝试任何可用的客户端方法;我的服务器端语言是 ColdFusion,它有些局限性,但我也乐于接受建议。

好的,经过更广泛的挖掘,我找到了一种检索自 CF10 发布以来才添加的文件类型的方法;这可以解释缺少文档的原因。

答案就在FileGetMimeType函数中。

<cfset someVar = "https://s3-us-west-2.amazonaws.com/easyhighlighting2/2015-07-271438019663927upload94788">
<cfset FileType = FileGetMimeType(someVar)>
<cfoutput>#FileType#</cfoutput>

此代码将输出 image/png - 这是正确的并且适用于我目前测试过的每种文件类型。

我很惊讶以前没有出现过这种问题,但这似乎是最好的答案,至少对于 CFML 的用户而言。

编辑:

ColdFusion 通过读取文件内容或信任其扩展名来实现这一点。此函数中使用了隐式属性 'strict'。如果为真,它会读取文件的内容。如果为 false,则使用提供的扩展名。

True 是默认值。

Link:

https://wikidocs.adobe.com/wiki/display/coldfusionen/FileGetMimeType

检查 Amazon S3 返回的 Content-Type HTTP 响应 header。

例如,curl -I https://s3.amazonaws.com/path/to/file 仅获取 header 个。