【问题标题】:Detecting a file mimetype in coldfusion that's already uploaded on the server在coldfusion中检测已经上传到服务器的文件mimetype
【发布时间】:2011-04-14 10:55:45
【问题描述】:

我正在尝试在我们的网络服务器上检测文件库的文件类型,因为我们正在实施旨在将文件安全地流式传输到浏览器的代码。以前,文件是通过直接 href 存储和呈现给用户的。

我尝试了 3 种不同的方法,全部在我的本地机器上(不是模拟生产环境):

  1. 将变量设置为函数 getPageContext().getServletContext().getMimeType() 返回的值。这会检测文件的某些但不是所有的 mime 类型。

  2. 从 Coldfusion.util.MimeTypeUtils 创建一个对象并调用函数guessMimeType()。这也会检测文件的某些但不是所有的 mime 类型。

  3. 对库中的文件执行 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


【解决方案1】:

我知道这是一个非常古老的问题,但提供的答案来自 CF9 和更早的时代。为了澄清那些使用CF10及以上的人,现在有一个filegetmimetype function

请注意,它不仅会查看文件扩展名,而且默认情况下还会评估一些内容,以确保内容与文件扩展名和所暗示的 mime 类型匹配。请参阅函数中的“严格”参数。

【讨论】:

  • 从未想过我会看到 Charlie Arehart 解决我在 SO 上提出的问题。
  • 我只是来帮助任何人,无论何时何地。 :-) 感谢您的支持,如果那是您的,并且无论哪种方式,都希望答案可以在未来对其他人有所帮助,显然,即使是真正的旧帖子也会在几年后获得流量,正如这个已经证明的那样。 :-)
【解决方案2】:

不会有 100% 保证万无一失的方式,因为 mime 类型是任意映射。

您将需要使用某人的映射,无论是操作系统还是 JVM。

您有责任填写操作系统或 JVM 在映射中的任何空白,并保持最新状态。

但是,我总是可以创建一些文件,给它一个 .xyzzy 的扩展名,而你将无法找出它的“mime-type”。

【讨论】:

  • 这似乎只对了一半。我怀疑 mime 类型没有存储在文件中,但任意分配听起来也不正确。当然,您可以创建自己的随机文件扩展名,但如果您想以编程方式使用它,除了在操作系统的 mime-type db 中设置扩展名和 mime-type 之外,必须有一种方法将您的文件类型与您的应用程序相关联/列表。
  • 也许“任意”是错误的词。我的意思是不是程序化的。您无法查看以前从未见过的文件并确定正确的 mime 类型。 mime 类型的规范注册在这里:iana.org/assignments/media-types。确定 mime 类型的方法通常是通过在已注册类型的数据库中查找文件扩展名或幻数 (en.wikipedia.org/wiki/…)。
  • 好的,我现在明白了。看看它是如何成为外部元数据的,我就知道不可能一直得到它们。我可以处理手动输入少量 mime 类型,并且我可以实现验证以仅接受当前可检测到的 mime 类型,或者在未知的 MS Office 文件的情况下,如果浏览器不能以编程方式分配正确的 mime 类型.感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 2010-10-15
相关资源
最近更新 更多