我正在尝试检测网络服务器上文件库的文件类型,因为我们正在实现旨在安全地将文件流式传输到浏览器的代码.以前,文件存储并通过直接href呈现给用户.
我尝试过3种不同的方式,都在我的本地机器上(这不是模拟的生产环境):
将变量设置为函数getPageContext().getServletContext().getMimeType()返回的值.这会检测文件的一些但不是所有mime类型.
从coldfusion.util.MimeTypeUtils创建一个对象并调用函数guessMimeType().这也会检测文件的一些但不是所有mime类型.
cffile action ="读取"库中的文件.这是我老板推荐的解决方案,因为他在文件中使用了cffile action ="upload"来自一个表单(并说它有效),但是当我使用它时,cffile结构总是空白的.
理想情况下,我想以100%的准确率检索位于服务器上的每个文件的mime类型.我编写的代码检测到我的repo副本中大约99%的文件,剩下大约30个无法识别的文件.其中包括具有新-x扩展名的MS office文件和tgz压缩文件.
我想知道是否有一种确定的方法来检测服务器上存在的任何给定文件的mime类型,通过使用CF代码来查看它,并且正在使用的代码将在生产服务器上工作安装的应用程序很少?据我所知,我引用的第一个函数使用OS的mime类型库,而第二个函数使用java对象中的预定列表作为mime-types.在Google和SO上搜索并没有产生任何告诉我CF可以自己准确检测文件mime类型的东西,也没有看到任何说明无法完成的事情.
编辑:这是在CF8环境中.
我在我公司的网站上有一个函数,它使用cgi.remote_host变量调用hostip.info提供的API 并返回orgin的国家/地区.这应该是这样的:
如果由于任何原因,我们无法将国家/地区与我们的某个地区相关联,我们会将用户重定向到默认网站.
什么实际发生的情况是,偶尔,我们的服务器无法定位API,我们得到一个超时错误.
这是我们要求获得领土的功能的代理:
<cffunction name="getGeoInfo" access="public" output="true" returntype="any" hint="call getGeoIP API and check country against DB">
<cfargument name="IPAddress" required="yes" type="string" />
<!--- Calling hostip API to get our Geo IP information --->
<cfhttp url="http://api.hostip.info/?ip=#arguments.IPAddress#" method="get" result="geoIP" />
<!--- Try to parse the file, if it can't parse, we don't create the variable --->
<cftry>
<cfset geoIPXML = xmlParse(geoIP.fileContent) />
<cfcatch type="any" />
</cftry>
<!--- If variable was …Run Code Online (Sandbox Code Playgroud) 我被我认为是创建功能的相对简单的任务所阻碍,以允许用户将图片上传到服务器目录并且正在寻找一些帮助.
我有一个简单的表单,有一个简单的接口,传递一个名为'imagedata'的变量,它是从文件输入传递的数据,一个名为'name'的变量,它是一个指定的图像名称,以及一个名为'imagetype'的变量,它传递一个文件扩展名.
我在函数(处理程序)中用来保存此文件的代码如下:
<cfset form.imageName = form.name & "." & form.imagetype />
...
<cffile action="write" file="#sitepath#storage/bannerImages/#form.imagename#" output="#form.imageData#" />
Run Code Online (Sandbox Code Playgroud)
这显然不起作用; 它将使用正确的名称保存文件,但不能正确保存文件,也不会呈现为图像.我认为这是相对简单的事情,我认为我忽略了一些东西,因为我在谷歌上找不到任何东西,这很奇怪.帮助解决这个问题将不胜感激.