按类型从 coldfusion 列表中排除项目
Excluding items from a list in coldfusion by type
有没有办法在 Coldfusion 的列表中按文件类型排除某些项目?
背景:我刚刚将一个压缩工具集成到一个现有的应用程序中,运行 进入该人先前代码的问题会自动从服务器上的上传目的地抓取文件并将其推送到网络附加存储。现在的目标是阻止他们的 NAS 迁移代码将所有文件移动到 NAS,只有那些不是 PDF 的文件。我想要做的是遍历存储上传文件名称的变量,并从列表中排除 pdf,然后将列表传递到 NAS 代码,因此所有非 pdf 都被移动,所有上传的 pdf 都保留在服务器上。使用他们的代码是一项挑战,因为没有人评论或记录任何内容,而且我一直在尝试多种方法。
<cffile action="upload" destination= "c:\uploads\" result="myfiles" nameconflict="makeunique" >
<cfset fileSys = CreateObject('component','cfc.FileManagement')>
<cfif Len(get.realec_transactionid)>
<cfset internalOnly=1 >
</cfif>
**This line below is what I want to loop through and exclude file names
with pdf extensions **
<cfset uploadedfilenames='#myfiles.clientFile#' >
<CFSET a_insert_time = #TimeFormat(Now(), "HH:mm:ss")#>
<CFSET a_insert_date = #DateFormat(Now(), "mm-dd-yyyy")#>
**This line calls their method from another cfc that has all the file
migration methods.**
<cfset new_file_name = #fileSys.MoveFromUploads(uploadedfilenames)#>
**Once it moves the file to the NAS, it inserts the file info into the
DB table here**
<cfquery name="addFile" datasource="#request.dsn#">
INSERT INTO upload_many (title_id, fileDate, filetime, fileupload)
VALUES('#get.title_id#', '#dateTimeStamp#', '#a_insert_time#', '#new_file_name#')
</cfquery>
<cfelse>
<cffile action="upload" destination= #ExpandPath("./uploaded_files/zip.txt")# nameconflict="overwrite" >
</cfif>
更新 6/18
尝试推荐的代码有助于解决在应用程序外部进行测试时整理文件类型的问题,但只要将其集成到应用程序中以对变量 uploadedfilenames
进行操作,应用程序的其余部分就会失败,多文件上传模块只会抛出状态 500 错误,并且 CF 日志中未报告任何错误。我发现简单地尝试 运行 一个 cfloop
在另一个与代码中的任何内容无关的变量上仍然会导致它出错。
我希望我没有误解这个问题,但是你为什么不把所有这些都包装在一个读取完整文件名的 if 语句中呢?无论文件是一个接一个出现还是通过分隔列表出现,都应该很容易解决。
<cfif !listContains(ListName, '.pdf')>
或
<cfif FileName does not contain '.pdf'>
然后
all the code you posted
据我了解,您想从主列表 uploadedfilenames
中过滤掉具有特定文件 type/extension(例如:pdf)的文件名。这是最简单的方法之一:
<cfset lFileNames = "C:\myfiles\proj\icon-img-12.png,C:\myfiles\proj\sample-file.ppt,C:\myfiles\proj\fin-doc1.docx,C:\myfiles\proj\fin-doc2.pdf,C:\myfiles\proj\invoice-temp.docx,C:\myfiles\proj\invoice-final.pdf" />
<cfset lResultList = "" />
<cfset fileExtToExclude = "pdf" />
<cfloop list="#lFileNames#" index="fileItem" delimiters=",">
<cfif ListLast(ListLast(fileItem,'\'),'.') NEQ fileExtToExclude>
<cfset lResultList = ListAppend(lResultList,"#fileItem#") />
</cfif>
</cfloop>
只使用ColdFusion提供的List函数很容易做到,你可以测试和尝试代码here。我建议您将此代码包装在一个函数中以便于处理。另一种方法是在列表中使用一些复杂的正则表达式(如果您正在寻找 ColdFusion 上下文之外的更通用的解决方案)。
现在,将解决方案应用于您的问题:
<cfset uploadedfilenames='#myfiles.clientFile#' >
<cfset lResultList = "" />
<cfset fileExtToExclude = "pdf" />
<cfloop list="#uploadedfilenames#" index="fileItem" delimiters=",">
<cfif ListLast(ListLast(fileItem,'\'),'.') NEQ fileExtToExclude>
<cfset lResultList = ListAppend(lResultList,fileItem) />
</cfif>
</cfloop>
<cfset uploadedfilenames = lResultList />
<!--- rest of your code continues --->
结果列表lResultList
复制到原变量uploadedfilenames
。
有没有办法在 Coldfusion 的列表中按文件类型排除某些项目? 背景:我刚刚将一个压缩工具集成到一个现有的应用程序中,运行 进入该人先前代码的问题会自动从服务器上的上传目的地抓取文件并将其推送到网络附加存储。现在的目标是阻止他们的 NAS 迁移代码将所有文件移动到 NAS,只有那些不是 PDF 的文件。我想要做的是遍历存储上传文件名称的变量,并从列表中排除 pdf,然后将列表传递到 NAS 代码,因此所有非 pdf 都被移动,所有上传的 pdf 都保留在服务器上。使用他们的代码是一项挑战,因为没有人评论或记录任何内容,而且我一直在尝试多种方法。
<cffile action="upload" destination= "c:\uploads\" result="myfiles" nameconflict="makeunique" >
<cfset fileSys = CreateObject('component','cfc.FileManagement')>
<cfif Len(get.realec_transactionid)>
<cfset internalOnly=1 >
</cfif>
**This line below is what I want to loop through and exclude file names
with pdf extensions **
<cfset uploadedfilenames='#myfiles.clientFile#' >
<CFSET a_insert_time = #TimeFormat(Now(), "HH:mm:ss")#>
<CFSET a_insert_date = #DateFormat(Now(), "mm-dd-yyyy")#>
**This line calls their method from another cfc that has all the file
migration methods.**
<cfset new_file_name = #fileSys.MoveFromUploads(uploadedfilenames)#>
**Once it moves the file to the NAS, it inserts the file info into the
DB table here**
<cfquery name="addFile" datasource="#request.dsn#">
INSERT INTO upload_many (title_id, fileDate, filetime, fileupload)
VALUES('#get.title_id#', '#dateTimeStamp#', '#a_insert_time#', '#new_file_name#')
</cfquery>
<cfelse>
<cffile action="upload" destination= #ExpandPath("./uploaded_files/zip.txt")# nameconflict="overwrite" >
</cfif>
更新 6/18
尝试推荐的代码有助于解决在应用程序外部进行测试时整理文件类型的问题,但只要将其集成到应用程序中以对变量 uploadedfilenames
进行操作,应用程序的其余部分就会失败,多文件上传模块只会抛出状态 500 错误,并且 CF 日志中未报告任何错误。我发现简单地尝试 运行 一个 cfloop
在另一个与代码中的任何内容无关的变量上仍然会导致它出错。
我希望我没有误解这个问题,但是你为什么不把所有这些都包装在一个读取完整文件名的 if 语句中呢?无论文件是一个接一个出现还是通过分隔列表出现,都应该很容易解决。
<cfif !listContains(ListName, '.pdf')>
或
<cfif FileName does not contain '.pdf'>
然后
all the code you posted
据我了解,您想从主列表 uploadedfilenames
中过滤掉具有特定文件 type/extension(例如:pdf)的文件名。这是最简单的方法之一:
<cfset lFileNames = "C:\myfiles\proj\icon-img-12.png,C:\myfiles\proj\sample-file.ppt,C:\myfiles\proj\fin-doc1.docx,C:\myfiles\proj\fin-doc2.pdf,C:\myfiles\proj\invoice-temp.docx,C:\myfiles\proj\invoice-final.pdf" />
<cfset lResultList = "" />
<cfset fileExtToExclude = "pdf" />
<cfloop list="#lFileNames#" index="fileItem" delimiters=",">
<cfif ListLast(ListLast(fileItem,'\'),'.') NEQ fileExtToExclude>
<cfset lResultList = ListAppend(lResultList,"#fileItem#") />
</cfif>
</cfloop>
只使用ColdFusion提供的List函数很容易做到,你可以测试和尝试代码here。我建议您将此代码包装在一个函数中以便于处理。另一种方法是在列表中使用一些复杂的正则表达式(如果您正在寻找 ColdFusion 上下文之外的更通用的解决方案)。
现在,将解决方案应用于您的问题:
<cfset uploadedfilenames='#myfiles.clientFile#' >
<cfset lResultList = "" />
<cfset fileExtToExclude = "pdf" />
<cfloop list="#uploadedfilenames#" index="fileItem" delimiters=",">
<cfif ListLast(ListLast(fileItem,'\'),'.') NEQ fileExtToExclude>
<cfset lResultList = ListAppend(lResultList,fileItem) />
</cfif>
</cfloop>
<cfset uploadedfilenames = lResultList />
<!--- rest of your code continues --->
结果列表lResultList
复制到原变量uploadedfilenames
。