我正在为我们的网站创建一个文件上传实用程序,如果上传的格式无效(根据我们的规格,这里不值得),我想删除zip文件解压缩到的文件夹,以及它的全部内容内容。
到目前为止,我使用了一种创建动态批处理文件的方法:
<!--- check if folder exists before starting to delete --->
<cfif directoryexists("#file_path_course#")>
<!--- this can be passed in a varaible or whatever --->
<cfset tDirectory = "#file_path_course#">
<!--- This is what we will put in the bat file --->
<cfset tString ="RMDIR /S /Q " & tDirectory>
<!--- generate a .BAT file for later execution --->
<cffile action="WRITE" file="#file_path_course#\delete.bat" output="#tString#">
<!--- Now execute the file to delete everything (Folder and all sub-folders and files)--->
<cfexecute name="#file_path_course#\delete.bat" timeout="60"></cfexecute>
<!--- check if bat file exists --->
<cfif fileexists("#file_path_course#\delete.bat")>
<!--- now delete the bat file --->
<cffile action="DELETE" file="#file_path_course#\delete.bat">
</cfif>
<!--- delete course folder --->
<cfdirectory action="delete" directory="#file_path_course#" recurse="yes">
<cfset course_files_deleted = "Yes">
</cfif>
但我确实关注允许使用cfexecute标签。
还有另一个选项,它使用cfdirectory recurse delete选项,这将完成我要求的所有内容,但我想非常确定它不会删除我指向它的文件夹之外的文件夹/文件。
还有第三种方法,它包含一个cfdirectory并在其周围循环,但我也喜欢使用较少的代码行来完成一个简单的操作。
您最信任哪个选项?
我正在运行IIS7,Coldfusion 8。
答案 0 :(得分:6)
为什么不使用cfdirectory?你说你担心它会删除你指定的文件夹“之外”的内容。它不会。就那么简单。如果确实如此,则标签将被破坏。 :)
答案 1 :(得分:3)
我不是编写批处理文件然后执行它,而是让ColdFusion完成所有工作。
<cfset targetDirectory = "C:\Websites\site\thisFolder" />
<cfif directoryExists(targetDirectory)>
<cfdirectory action="list" directory="#targetDirectory#" listInfo="" name="theseFiles" recurse="true" type="file" />
<cfif theseFiles.recordcount gt 0>
<cfloop query="theseFiles">
<cffile action="delete" file="#targetDirectory#/#theseFiles.name#" />
</cfloop>
</cfif>
<cfdirectory action="delete" directory="#uploadDirectory#/#allFolders.name#" />
</cfif>
答案 2 :(得分:2)
我要做的是将文件上传到webroot之外的临时目录。你可以使用gettempdirectory()来完成这个使用你系统的临时目录(c:\ windows \ temp for windows)
然后你可以将文件解压缩到temp目录下的子目录中,并对解压缩的文件执行一些安全检查,并确保一切正常,同时不打开你的站点进行任何攻击。如果一切都结束,您可以将文件移动到最终的休息位置。如果没有,只需使用cfdirectory(如cfjedimaster指出)删除子目录和所有文件。