5

我根本不使用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 文件夹名称/ 等......对吗?那是绝对服务器路径,coldfusion 文档似乎至少指定了一个微软绝对服务器路径,所以我假设这是需要的。

编辑--------------- PS:我不能只给你们一个信用,所以我把它给了克鲁格,因为他来了分钟前。哈哈...

4

4 回答 4

5

FileExists() 返回一个布尔值。既然错字已被修复,这应该可以正常工作:

<cfif fileExists(TheFile)>
  // do this
<cfelse>
  // do that
</cfif>
于 2012-04-30T20:05:19.423 回答
3

假设您的 application.Filepath 是您在正确轨道上的正确文件路径。看起来您的上传目录可能位于 Web 根目录下 - 考虑将其移到Web 根目录之外以确保安全。看看#expandPath('.')# 作为一种创建没有错别字的有保证的文件路径的方法:) 也使您的代码更便携。

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

<Cfif FileExists(iconName)>...

你也可以做

condition="NOT myVar">

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

如果您的 fileExists() 从未命中,请仔细查看您的重命名。你在抛出错误吗?

于 2012-04-30T20:06:20.440 回答
3

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

于 2012-04-30T21:08:57.860 回答
-1

拥有后端安全性很好,但这应该在前端处理,所以你永远不会得到你不想要的值。新的 HTML5 输入模式将阻止此问题被提交,因此您不必在后端修复此问题。

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

于 2016-06-23T17:32:52.077 回答