2015-06-23 3 views
0

Как прокрутить запрос и передать один результат за раз, а не все результаты?Зацикливание через cfquery для перемещения файла с ошибкой

Я бегу запрос и с помощью <cfloop> Переберите результат и для каждого имени файла в запросе, <cffile> необходимо переместить файл из одной папки в другую следующим образом:

cfquery name="qryGetFilesJustUploaded" datasource="#request.dsn#">           <!--- Limit to filed with pdf file type endings ---> 
      SELECT fileupload 
      FROM [DevDBServer].[dbo].[upload_many] 
      WHERE (fileupload Like '%.pdf%') and (needs_compression = '1') 
      </cfquery> 


    cffunction name="MoveCompressReturnFile" access="public" returntype="void" description="Moves file to temp folder, compresses it then returns it to its original location"> 
     <!---Lets Loop through and move all files references in query---> 
     <cfloop query="#qryGetFilesJustUploaded#"> 
     <cffile action="move" 
source="C:\inetpub\wwwroot\testingFolder\PDFCompression\pdf\#qryGetFilesJustUploaded.fileupload#" 
     destination="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin" > 

     <!--- Now lets compress it---> 
     <cfexecute name="C:\Program Files (x86)\neeviaPDF.com\PDFcompress\cmdLine\CLcompr.exe" 
     arguments="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\#qryGetFilesJustUploaded.fileupload# C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\#qryGetFilesJustUploaded.fileupload# -co -ci jpg -cq 10 -gi jpg -gq 10 -mi jbig2 -mq 1" 
     outputfile="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\output.txt" 
     timeout="250"> 
     </cfexecute> 

     <!---Now Lets Return the file back to its original folder---> 
     <cffile action="move" 
     source="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\#qryGetFilesJustUploaded.fileupload#" 
     destination="C:\inetpub\wwwroot\testingFolder\PDFCompression\pdf" > 
     </cfloop> 
     </cffunction> 

Когда он подходит для запуска первой команды cffile, я получаю сообщение об ошибке, что C: .... C: .... не является допустимым источником, и похоже, что его выполнение - это указание нескольких файлов одновременно, а не хватайте их по одному, пока не закончите захват всех файлов, на которые ссылается запрос. Как это исправить?

Обновление: Код не проходит успешно по результатам запроса. 1. Протестировал код с помощью filename = "document1.pdf", и он работал без проблем, передавая это в метод FindFilePath и возвращая путь к файлу и выполняя оставшуюся часть кода. Однако, если его заменить на filename = "qryGetFilesJustUploaded", каждое из имен файлов в запросе, похоже, не будет успешно передано, поэтому путь к файлу этого файла может быть возвращен.

  1. Был ли дамп запроса для проверки моего запроса и доступен список файлов.
  2. Также проверено, существуют ли файлы и что в именах файлов нет нечетного форматирования.
+0

Шаг 1 - посмотреть на ваши данные. В частности, дамп qryGetFilesJustUploaded. –

+0

Можете ли вы использовать функцию expandpath() для установки источника и назначения? – cfprabhu

ответ

2

Вы можете попробовать поставить sleep(5000) после каждого файла. Это связано с тем, что для завершения работы файла требуется некоторое время. Возможно, во время первой операции с файлом начнется следующая операция с файлом. И поэтому в некоторых случаях вы можете столкнуться с такими проблемами. Попробуй это.

<cfloop query="#qryGetFilesJustUploaded#"> 
    <cffile action="move" source="C:\inetpub\wwwroot\testingFolder\PDFCompression\pdf\#qryGetFilesJustUploaded.fileupload#" 
    destination="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin" > 
    <cfset sleep(5000)> 
    <!--- Now lets compress it---> 
    <cfexecute name="C:\Program Files (x86)\neeviaPDF.com\PDFcompress\cmdLine\CLcompr.exe" 
    arguments="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\#qryGetFilesJustUploaded.fileupload# C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\#qryGetFilesJustUploaded.fileupload# -co -ci jpg -cq 10 -gi jpg -gq 10 -mi jbig2 -mq 1" 
    outputfile="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\output.txt" 
    timeout="250"> 
    </cfexecute> 
    <cfset sleep(5000)> 
    <!---Now Lets Return the file back to its original folder---> 
    <cffile action="move" 
    source="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\#qryGetFilesJustUploaded.fileupload#" 
    destination="C:\inetpub\wwwroot\testingFolder\PDFCompression\pdf" > 
    <cfset sleep(5000)> 
</cfloop> 
-1

Решенный

Когда я установил свой запрос на имя файла, я забыл установить его на «queryname.columnname» синтаксис.

Рабочий код:

<cffunction name="testFunc" access="public"> 

<!--Lets Get the file names from the DB table---> 
<cfquery name="qryGetFilesJustUploaded" datasource="#request.dsn#"> 
    SELECT fileupload 
    FROM [First_Title_Services_Dev].[dbo].[upload_many] 
    WHERE (fileupload Like '%.pdf%') and (needs_compression = '1') 
    </cfquery> 
    <cfset qryRecordCount = #qryGetFilesJustUploaded.RecordCount# > 

<!--Set the methods and variables---> 
<cfset fileSys = CreateObject('component','cfc.FileManagement')> 

<cfloop query="qryGetFilesJustUploaded" startRow="1" endRow="#qryRecordCount#"> 
<cfset filename="#qryGetFilesJustUploaded.fileupload#" > 
<cfset filePath = #fileSys.FindFilePath('#filename#','file')# > 
<cffile action="move" source="#filePath#" destination="C:\compressionBin"> 
<cfset sleep(5000)> 

<!---Compress the file now---> 
<cfexecute name="C:\Program Files (x86)\neeviaPDF.com\PDFcompress\cmdLine\CLcompr.exe" 
arguments="C:\compressionBin\#filename# C:\compressionBin\#filename# -co -ci jpg -cq 10 -gi jpg -gq 10 -mi jbig2 -mq 1" 
outputfile="C:\inetpub\wwwroot\testingFolder\PDFCompression\bin\output.txt" 
timeout="250"> 
</cfexecute> 
<cfset sleep(5000)> 
<!---Lets Return the file now---> 
<!---Back to where you came from! :D---> 
<cffile action="move" 
source="C:\compressionBin\#filename#" destination="#filePath#" > 
<cfset sleep(5000)> 
</cfloop> 
</cffunction> 
+0

Ум .. где? Все ссылки на запросы в OP используют имя запроса и столбца, то есть 'qryGetFilesJustUploaded.fileupload'. – Leigh

+0

Когда я установил переменную 'filename = # qryGetFilesJustUploaded.fileupload #', она сработала. Честно говоря, эта система CF не является обычной. Чтобы все работало, мне приходилось прибегать к каким-то очень нетрадиционным методам. Его были взломаны не настолько правильными средствами. Это то, что делает работу с ним и добавление к ней такой боли. Когда я тестирую вещи на своем местном, они работают, но в их среде с взломом вместе они часто терпят неудачу. – Alex

+0

Это не то, что вы описали выше. Хотя он все еще [не имеет значения] (http://trycf.com/gist/1403d0cb900326b3914e/acf?theme=monokai). Результат такой же, как и непосредственно с помощью 'qryGetFilesJustUploaded.fileupload', как в исходном коде. Так что проблема была что-то другое. Честно говоря, это звучит как локализованная проблема, которая либо не может быть воспроизведена, либо вряд ли произойдет вне вашей среды. Поэтому вы, вероятно, должны удалить поток. – Leigh

 Смежные вопросы

  • Нет связанных вопросов^_^