我正在尝试遍历服务器上的一个文件夹,以获取特定文件的列表,然后将这些文件复制到临时目录或压缩并复制到临时目录。然而,我总是碰壁,因为我不知道该怎么做。(仍然是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>附注:一些变量和代码是为了安全和anonymity..but而编写的,我想要显示我正在尝试完成的内容的结构,我希望我说得很清楚(!)如果不是这样,请让我知道,我会提供更多的细节或信息。任何帮助都是非常感谢的,我一直在用头撞墙,我觉得这可能是非常简单的事情。请帮帮忙!:)
发布于 2019-02-06 02:15:47
在不知道实际值的情况下,您的查询听起来像是包含单个文件的绝对路径。一种选择是遍历查询并为每个文件添加一个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这样的东西,无论源是文件/目录还是相对/绝对路径,将有助于我们立即排除几个潜在的问题。
发布于 2019-02-06 01:25:45
<cfif test.recordcount>
<cfloop query="test">
<cfzip action="zip" file="#LocationOfwhereIwantTheEndResult#" source="#WhereTheFolderWithTheAttachmentsReside#">
</cfzip>
</cfloop>
</cfif>我怀疑您的file和source位置不正确。使用ExpandPath()函数来确保它会被放到正确的位置。
https://stackoverflow.com/questions/54539667
复制相似问题