这是我的代码:
<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif CFFILE.serverFileExt neq "png" >
Delete File
<cfelse>
It's ok
</cfif>
我想将“jpg”和“jpeg”添加为允许的文件类型。我试过了,这个没有成功。
<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif ( ( CFFILE.serverFileExt neq "png" ) OR ( CFFILE.serverFileExt neq "jpg" ) OR ( CFFILE.serverFileExt neq "jpeg" ) ) >
Delete File
<cfelse>
It's ok
</cfif>
有什么想法吗?
SOLUTION:
我的OR声明需要成为AND,谢谢Miguel-F,并且随着Busches改进,这是最终结果:
<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif NOT ListFindNoCase("jpg,jpeg,png", CFFILE.serverFileExt)>
Delete File
<cfelse>
It's ok
</cfif>
谢谢你们!
答案 0 :(得分:8)
正如Miguel-F所述,您的问题是需要使用AND
代替OR
。在这种情况下,我还建议您切换到使用ListFindNoCase()
而不是使用多个OR/AND
语句。
<cfif CFFILE.FileSize GT 4194304> <!--- You also don't need all those () here --->
Delete File
<cfelseif NOT ListFindNoCase( "png,jpg,jpeg", cffile.ServerFileExt )>
Delete File
<cfelse>
It's ok
</cfif>
ListFindNoCase
更简洁,更易于阅读和维护。注意,如
答案 1 :(得分:3)
您的代码在语法上是正确的,但逻辑是有缺陷的。由于您使用OR
,因此该条件始终为真。只要其中一个条件成立,条件就会过去。请尝试使用AND
,如下所示:
<cfif (CFFILE.FileSize GT (4194304))>
Delete File
<cfelseif (CFFILE.serverFileExt NEQ "png") AND (CFFILE.serverFileExt NEQ "jpg") AND (CFFILE.serverFileExt NEQ "jpeg")>
Delete File
<cfelse>
It's ok
</cfif>
如果您使用ColdFusion ListFindNoCase()函数,请参阅Busches答案,以便稍微压缩您的代码。
答案 2 :(得分:2)
我认为代码中的问题只是在语句中使用“OR”。如果我正确读取您的样本,则每次都会删除该文件。
我相信这会产生你想要的效果。
<cfelseif ( ( CFFILE.serverFileExt neq "png" )
AND ( CFFILE.serverFileExt neq "jpg" )
AND ( CFFILE.serverFileExt neq "jpeg" ) ) >
您不是在寻找可能被删除的文件满足条件的任何一个的情况(这是“OR”所做的),因为任何文件扩展名至少不等于3个选项中的2个。
相反,您正在寻找可能被删除的文件满足所有条件的情况(这就是“AND”的作用。