如何正确使用Coldfusion File Exist()方法?

时间:2012-04-30 19:27:24

标签: coldfusion file-exists

我根本不使用coldfusion,但我需要修补一些代码。基本上我正在尝试检查并查看我上传的文件是否存在以及是否存在,将变量增加1.然后重复直到我得到一个唯一的文件名。无论出于何种原因,我无法弄清楚使用FileExist()的正确方法。一些论坛建议将它与len()一起使用,但这些是从2006年开始的,当我这样做时,它似乎总是真实的。此外,当我查看http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7c66.html时,它会返回是或否。我试图以各种方式检查结果,但没有运气。

这是我正在处理的代码部分。 application.filepath只是我的应用程序文件中的一个变量,它存储了expandpath()。

<cffile action="upload" destination="#Application.filePath#ListingsGallery/" filefield="iconImage" nameconflict="makeunique">
<cfset iconPlace = #cffile.serverfile#>
<cfset myExt = listLast(iconPlace,".")>
<cfset i = 1 >
<cfset myVar = false>
<cfloop condition="myVar EQ false">

    <cfset newIconName = "iconPhoto" & i &"."& myExt>
    <cfset iconName = Application.filePath & "ListingsGallery/" & #newIconName#>
<cfoutput>#iconName#</cfoutput><br />//just checking to see if it is the correct path, it is.

    <cfif FileExists(iconName) EQ 'Yes'>
         <cfoutput>#myVar#</cfoutput> //checking the value, it never hits here.
    <cfelse>
             <cfoutput>#myVar#</cfoutput><br /> //checking the value, it always hits here.
    <cfset myVar = true>        
             <cfoutput>#myVar#</cfoutput> //Again check the value.
    </cfif>
<cfset i++>
</cfloop>                     
<cffile action="rename" source="#Application.filePath#ListingsGallery/#iconPlace#" destination="#Application.filePath#ListingsGallery/#newIconName#">

unix服务器上的绝对路径类似于/ var / www / website文件夹名称/ etc .... 正确?这是绝对的服务器路径,coldfusion文档似乎至少指定了一个微软绝对服务器路径,所以我假设这是需要的。

编辑--------------------------- PS:我可以'只给你们一个人的信用,所以我把它送给克鲁格,因为他早一分钟来。 洛尔...

4 个答案:

答案 0 :(得分:5)

FileExists()返回一个布尔值。在错字已修复的情况下,这应该可以正常工作:

<cfif fileExists(TheFile)>
  // do this
<cfelse>
  // do that
</cfif>

答案 1 :(得分:3)

假设您的application.Filepath是正确的文件路径,您就在正确的轨道上。看起来您的上传目录可能位于Web根目录下 - 考虑将其移到 Web根目录以确保安全性。看一下#expandPath('。')#作为一种创建保证文件路径而无需打字错误的方法:)也使您的代码更具可移植性。

在我看来,上面的代码可行。仅供参考 - 您不需要“EQ'YES'。您可以这样做:

<Cfif FileExists(iconName)>...

您也可以

condition="NOT myVar">

有几种方法可以处理CF中的逻辑代码。

如果你的fileExists()从未点击过,请仔细查看你的重命名。你在扔一个恐怖?

答案 2 :(得分:3)

我还不能在答案中添加注释,但我想让OP知道在函数中进行布尔评估时CF是无类型的。 0与“no”相同,与“false”相同,而任何正数与“yes”相同,与“true”相同。

答案 3 :(得分:-1)

很高兴有后端安全性,但这应该在前端处理,所以你永远不会得到你不想要的值。新的HTML5输入模式可以防止这种情况被提交,因此你不必在后端修复它。

http://www.w3schools.com/tags/att_input_pattern.asp