如何确定没有扩展名的 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 个。
例如,我目前正在使用表单将项目直接上传到 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 个。