如何在没有扩展名的情况下确定AWS S3托管文件上的文件类型?

时间:2015-07-27 19:48:50

标签: amazon-web-services amazon-s3 coldfusion metadata file-type

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

我上传了一个产生这个直接链接的.png:

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

当我将其放在img标记内时,它会正确显示在网页上。

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

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

我已准备好尝试任何可用的客户端方法;我的服务器端语言是ColdFusion,这有点限制,但我也可以接受这方面的建议。

2 个答案:

答案 0 :(得分:4)

好的,经过一些更广泛的挖掘后,我发现了一种检索文件类型的方法,该方法仅在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'。如果为true,则读取文件的内容。如果为false,则使用提供的扩展名。

True是默认值。

链接:

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

答案 1 :(得分:0)

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

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