例如,我目前正在使用表单将项目直接上传到S3存储桶。在我测试时,我没有指定任何预期的文件名或扩展名。
我上传了一个产生这个直接链接的.png:
https://s3-us-west-2.amazonaws.com/easyhighlighting2/2015-07-271438019663927upload94788
当我将其放在img
标记内时,它会正确显示在网页上。
我的问题是,如果没有扩展程序,我的浏览器将如何知道它正在加载哪种类型的文件?在存储桶中,文件的元数据甚至都没有填写。
有没有办法以编程方式获取该文件扩展名?
我已准备好尝试任何可用的客户端方法;我的服务器端语言是ColdFusion,这有点限制,但我也可以接受这方面的建议。
答案 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
仅获取标头。