【发布时间】:2011-04-14 10:55:45
【问题描述】:
我正在尝试在我们的网络服务器上检测文件库的文件类型,因为我们正在实施旨在将文件安全地流式传输到浏览器的代码。以前,文件是通过直接 href 存储和呈现给用户的。
我尝试了 3 种不同的方法,全部在我的本地机器上(不是模拟生产环境):
将变量设置为函数 getPageContext().getServletContext().getMimeType() 返回的值。这会检测文件的某些但不是所有的 mime 类型。
从 Coldfusion.util.MimeTypeUtils 创建一个对象并调用函数guessMimeType()。这也会检测文件的某些但不是所有的 mime 类型。
-
对库中的文件执行 cffile action="read"。这是我老板推荐的解决方案,因为他已经在表单中使用 cffile action="upload" 的文件上使用了它(并说它有效),但是当我使用它时,cffile 结构总是空白。
理想情况下,我想以 100% 的准确率检索服务器上每个文件的 mime 类型。我编写的代码已检测到我的 repo 副本中大约 99% 的文件,剩下大约 30 个无法识别。其中包括带有新 -x 扩展名的 MS office 文件和 tgz 压缩文件。
我想知道是否有一种可靠的方法可以通过使用 CF 代码来检测服务器上存在的任何给定文件的 mime 类型,并且正在使用的代码是否适用于生产服务器安装很少的应用程序?据我了解,我引用的第一个函数使用了操作系统的 mime 类型库,而第二个函数使用了 java 对象中的预定列表用于 mime 类型。在 Google 和 SO 上搜索并没有产生任何信息告诉我 CF 可以自行准确检测文件 mime 类型,我也没有看到任何说这不能完成的信息。
编辑:这是在 CF8 环境中。
【问题讨论】:
-
IIRC,cffile upload上的mime type是客户端浏览器上报的mime type,可能准确也可能不准确。它始终存在,因为浏览器需要发送 something,即使它本质上是一个占位符。
-
@Ben,我也是这么想的。在谷歌上搜索显示与该解释一致的结果。如果我能在这里找到答案,我可以组合一个函数来检查后端上传文件的 MIME 类型,这样我们就不必在以后返回并清理数据,因为上传的文件中的 MIME 类型不一致或不正确用户。
标签: coldfusion mime mime-types