ColdFusion заархивирует всю папку
Я переместил некоторые файлы из одного каталога в другой на своем сервере. Я хочу заархивировать папку назначения после перемещения файлов.
<cfoutput>
<cfset destination = expandPath("./TenantFiles/tempEmail/11/") />
<cfif not directoryExists(destination)>
<cfdirectory action="create" directory="#destination#">
<cfelse>
<cfdirectory action="delete" directory="#destination#" recurse="true">
<cfdirectory action="create" directory="#destination#">
</cfif>
<cfloop query="myQuery">
<cfset sourcefile = expandPath("./TenantFiles/11/#myQuery.TenantID#/#myQuery.DocumentName#") />
<cfif FileExists(sourcefile)>
<cfscript>
FileMove(#sourcefile#, #destination#);
</cfscript>
</cfif>
</cfloop>
<cfzip action="zip" file="#destination#\ZipFile.zip" source="#destination#" filter="*.pdf" />
</cfoutput>
Он возвращает ошибку:
Can not create a zip file with no entries.
Make sure that there is at least one entry in the zip file.
Тем не менее #destination#
В папке много файлов pdf.
Спасибо
1 ответ
Вместо того, чтобы обсуждать возможные проблемы, я создал функцию, с помощью которой можно проверить, не происходит ли что-то еще в вашей среде. Я устранил перемещение файлов и другие возможные источники проблем.
Попробуйте просто настроить тестовую папку, соответствующую этому примеру, и посмотреть, работает ли она, прежде чем использовать ваш настоящий запрос и файлы. Я установил, чтобы путь к файлам не сохранялся в zip-архиве, так как это было результатом перемещения и добавления файлов, но в конечном итоге это может оказаться не тем, что вам нужно.
<cfset myQuery = queryNew("") />
<cfset TenantIDs = [1,2,3,4] />
<cfset DocumentNames = ['one.pdf','two.pdf','three.txt','four.doc'] />
<cfset queryAddColumn(myQuery, 'TenantID', "integer", TenantIDs) />
<cfset queryAddColumn(myQuery, 'DocumentName', "varchar", DocumentNames) />
<cfset zipPdfFiles(expandPath('./testfiles'), myQuery, "TenantID", "DocumentName", expandPath('./testfiles/zipFile.zip'), "pdf") />
<cffunction name="zipPdfFiles" output="true">
<cfargument name="baseFilePath" required="true" />
<cfargument name="fileQuery" required="true" />
<cfargument name="folderColumn" required="true" />
<cfargument name="fileNameColumn" required="true" />
<cfargument name="zipFilePath" required="true" />
<cfargument name="allowExtensions" default="" hint="comma separated list of extensions or blank for all" />
<cfzip action="zip" file="#arguments.zipFilePath#" storePath="false">
<cfloop query="arguments.fileQuery">
<cfif not len(arguments.allowExtensions) or listFindNoCase(arguments.allowExtensions, listLast(myQuery.DocumentName, "."))>
<cfzipparam source="#arguments.baseFilePath#/#arguments.fileQuery[arguments.folderColumn][currentRow]#/#arguments.fileQuery[arguments.fileNameColumn][currentRow]#" />
</cfif>
</cfloop>
</cfzip>
</cffunction>