ColdFusion - необходимо пройтись по папке, чтобы найти конкретные файлы из запроса SQL и скопировать или заархивировать их во временную папку - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь перебрать папку на сервере, чтобы получить список определенных файлов, а затем скопировать эти файлы во временный каталог или заархивировать и скопировать во временный каталог.Однако я продолжаю врезаться в стену, поскольку я не уверен, как это сделать.(Все еще любитель ColdFusion)

, поэтому здесь я делаю SQL-запрос, в котором извлекаю точные вложения из определенных дат, которые я ищу:

<cfquery name="test" datasource="test" cachedwithin="#CreateTimeSpan(0,0,10,0)#" result="r">
SELECT Test.TestNum, Test1.Test1Date, TestReport.Attachment
FROM Test
INNER JOIN more SQL code here..
WHERE Test1.Test1Date >= '#daterangevariablehere#'
AND NOT more SQL code here as well..
ORDER BY Test.TestNum
</cfquery>

SQL-запрос правильный, как вSQL Server Mgmt Studio, он работает правильно, и даже прежде чем я попытаюсь сделать cfdump, он показывает правильный список файлов, которые я пытаюсь получить.Однако, когда я пытаюсь просмотреть их, чтобы скопировать или заархивировать, это полный провал -> пустая страница.

Я пытался:

<cfloop query="test">
<cfif test.recordcount gt 0>
<cfzip action="zip" file="#LocationOfwhereIwantTheEndResult" source="#WhereTheFolderWithTheAttachmentsReside#">
</cfzip>
</cfloop>

Я даже пытался сделать это, обернутый вокруг кода выше:

<cfdirectory action="list" name="test" directory="#WhereTheFolderWithTheAttachmentsReside#"></cfdirectory>

Примечание: некоторые переменные и кодсделаны с целью обеспечения безопасности и анонимности ... но я хотел показать структуру того, что я пытаюсь достичь, я надеюсь, что я ясно (!), если в противном случае, пожалуйста, дайте мне знать, и я предоставлю более подробную информацию или информацию,ЛЮБАЯ помощь очень ценится, я бился головой об стену и чувствую, что это может быть что-то очень простое.Пожалуйста помоги!:)

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Не зная реальных значений, звучит так, будто ваш запрос содержит абсолютные пути к отдельным файлам.Одним из вариантов является циклическое выполнение запроса и добавление cfzipparam для каждого файла.Вот отдельный пример, вы можете адаптировать.(Он использует CFML, потому что это то, что в вашем примере, но если вам удобно с синтаксисом скрипта, поищите версии на основе cfscript по ссылке выше).

Пример CFML:

<!--- For Demo only to simulate your database query --->
<cfset test = queryNew("Attachment"
            , "varchar"
            , [{Attachment="c:\path\to\fileA.png"}
                , {Attachment="c:\path\to\fileB.png"}
                , {Attachment="c:\path\to\fileC.png"}
            ])>

<cfzip action="zip" file="c:\path\to\TheNameYouWant.zip">
    <cfloop query="test">
        <!--- If Attachment only contains a file name (i.e. "someFileName.pdf") 
           use your variables to build a full path, i.e. "c:\path\to\someFileName.pdf" 
         --->
        <cfzipparam source="#Attachment#">
    </cfloop>
</cfzip>

Пример CFScript

<cfscript>
   test = queryNew("Attachment"
            , "varchar"
            , [{Attachment="c:\path\to\fileA.png"}
                , {Attachment="c:\path\to\fileB.png"}
                , {Attachment="c:\path\to\fileC.png"}
            ]);

    cfzip (action="zip", file="c:\path\to\TheNameYouWant.zip") {
        for (row in test) {
            cfzipparam (source=row.Attachment);
        }
    }
</cfscript>

Вкратце, вам не нужно указывать фактические пути.В большинстве случаев это все равно не имеет значения ;-) Однако, пожалуйста, публикуйте жестко закодированные значения, которые представляют фактический путь - НЕ переменные.Причина в том, что переменные оставляют много открытых вопросов, на которые легко можно ответить, используя фиктивный путь, такой как c:\path\to\fileA.pdf.В этом конкретном случае знание таких вещей, как ваши o / s, будь то источники файлов / каталогов или относительных / абсолютных путей, поможет нам сразу исключить несколько потенциальных проблем.

0 голосов
/ 05 февраля 2019
<cfif test.recordcount>
  <cfloop query="test">
    <cfzip action="zip" file="#LocationOfwhereIwantTheEndResult#" source="#WhereTheFolderWithTheAttachmentsReside#">
    </cfzip>
  </cfloop>
</cfif>

Я подозреваю, что ваши file и source местоположения неверны.Используйте функцию ExpandPath(), чтобы убедиться, что она идет в правильное место.

...