我正在尝试检测网络服务器上文件库的文件类型,因为我们正在实现旨在安全地将文件流式传输到浏览器的代码。以前,这些文件是通过直接href存储和呈现给用户的。
我尝试过3种不同的方式,都在我的本地机器上(这不是模拟的生产环境):
将变量设置为函数getPageContext()。getServletContext()。getMimeType()返回的值。这会检测文件的一些但不是所有mime类型。
从coldfusion.util.MimeTypeUtils创建一个对象并调用函数guessMimeType()。这也会检测文件的一些但不是所有mime类型。
cffile action =“read”对库中的文件。这是我老板推荐的解决方案,因为他在文件中使用了cffile action =“upload”来自表单(并且说它有效),但是当我使用它时,cffile结构总是空白的。
< / LI> 醇>理想情况下,我想以100%的准确率检索位于服务器上的每个文件的mime类型。我编写的代码检测到我的repo副本中大约99%的文件,剩下大约30个无法识别的文件。其中包括带有新-x扩展名的MS office文件和tgz压缩文件。
我想知道是否有一种可靠的方法来检测服务器上存在的任何给定文件的mime类型,通过使用CF代码来查看它,并且正在使用的代码将用于生产安装了很少应用程序的服务器?据我所知,我引用的第一个函数使用OS的mime类型库,而第二个函数使用java对象中的预定列表作为mime-types。在Google和SO上搜索并没有产生任何告诉我CF可以自己准确检测文件mime类型的内容,也没有看到任何说明无法完成的内容。
编辑:这是在CF8环境中。
答案 0 :(得分:2)
由于mime类型是任意映射,因此不会有100%保证肯定的方式。
您需要使用某人的映射,无论是操作系统还是JVM。
您有责任填写操作系统或JVM在映射中的任何空白,并保持最新状态。
但是,我总是可以创建一些文件,给它一个.xyzzy的扩展名,你将无法找到它的'mime-type'。
答案 1 :(得分:0)
我知道这是一个非常古老的问题,但提供的答案来自 CF9 和更早的时代。为了向使用 CF10 及更高版本的用户澄清,现在有一个 filegetmimetype function。
请注意,它不仅查看文件扩展名,而且默认情况下还会评估某些内容以确保内容与暗示的文件扩展名和 mime 类型相匹配。请参阅函数中的“strict”参数。