在coldfusion中检测到一个文件mimetype';s已上载到服务器上

在coldfusion中检测到一个文件mimetype';s已上载到服务器上,coldfusion,mime,mime-types,Coldfusion,Mime,Mime Types,我正在尝试检测Web服务器上文件库的文件类型,因为我们正在实现旨在将文件安全地流式传输到浏览器的代码。以前,文件是通过直接href存储并呈现给用户的 我尝试了3种不同的方法,都是在我的本地机器上完成的(这不是模拟的生产环境): 将变量设置为从函数getPageContext().getServletContext().GetMimetType()返回的值。这会检测文件的某些但不是所有mime类型 从coldfusion.util.MimeTypeUtils创建对象并调用函数guessMimeTy

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

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

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

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

  • 对库中的文件执行cffile action=“read”。这是我老板推荐的解决方案,因为他在表单中使用cffile action=“upload”的文件上使用了该解决方案(并说它有效),但当我使用它时,cffile结构总是空白的

  • 理想情况下,我希望以100%的准确率检索服务器上每个文件的mime类型。我写的代码在我的回购协议副本上检测到了大约99%的文件,剩下大约30个无法识别。其中包括具有新的-x扩展名的MS office文件和tgz压缩文件

    我想知道是否有一种可靠的方法可以通过使用CF代码来检测服务器上存在的任何给定文件的mime类型,并且正在使用的代码是否可以在安装很少应用程序的生产服务器上工作?据我所知,我引用的第一个函数使用操作系统的mime类型库,第二个函数使用java对象中预定的mime类型列表。在Google上搜索,所以没有任何东西告诉我CF可以自己准确地检测文件mime类型,我也没有看到任何东西说这是不可能的


    编辑:这是在CF8环境下进行的。

    不会有100%保证可靠的方式,因为mime类型是任意映射

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

    您有责任填补操作系统或JVM在映射中的任何空白,并使其保持最新


    但是,我始终能够创建一些文件,将其扩展名设为.xyzy,而您将无法找到它的“mime类型”。

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


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

    IIRC,cffile upload上的mime类型是客户端浏览器报告的mime类型,可能准确,也可能不准确。它总是存在的,因为浏览器需要发送一些东西,即使它本质上是一个占位符。@Ben,我也是这么想的。谷歌搜索显示的结果与上述解释一致。如果我能在这里找到答案,我可以在后端设置一个函数来检查上传文件的mime类型,这样我们就不必在以后从用户上传的文件中删除不一致或不正确的mime类型的数据。这似乎只对了一半。我怀疑mime类型没有存储在文件中,但任意赋值听起来也不正确。当然,您可以创建自己的随机文件扩展名,但是如果您想以编程方式使用它,除了在操作系统的mime类型db/列表中设置扩展名和mime类型之外,还必须有一种方法将您的文件类型与应用程序相关联。也许“任意”是错误的词。我的意思是说它不是程序化的。您无法查看以前从未见过的文件并确定正确的mime类型。mime类型的规范注册在此处:。确定mime类型的方法通常是根据注册类型的数据库查找文件扩展名或幻数()。看到它是如何的外部元数据,我看到如何不可能一直获取它们。我可以手动输入少量mime类型,并且我可以实现验证,以仅接受当前可检测的mime类型,或者在未知的MS Office文件的情况下,如果浏览器不能,只需通过编程指定正确的mime类型。谢谢你的帮助。