我正在尝试使用Coldfusion解密CSV。 CSV已使用gpg4win加密。我在CF Admin中创建了一个计划任务,检查加密文件的文件夹,如果找到,将其解密并将结果作为CSV文件存储在另一个文件夹中(然后将其导入到数据库中)。
这是代码的摘录:
<cfparam name="Variables.InputFolderName" default="inputfolder" />
<cfparam name="Variables.OutputFolderName" default="outputfolder" />
<cfparam name="gKeyPassphrase" default="sampletestkey" />
<cfparam name="gEncryptionKeyID" default="sampletestid" />
<cfset inputFilePath = ExpandPath("/resources/uploads/csv/#Variables.InputFolderName#") />
<cfset outputpath = ExpandPath("/resources/uploads/#Variables.OutputFolderName#") />
<cftry>
<cfdirectory directory="#inputFilePath#" name="Variables.EncryptedCSVFiles" filter="*.gpg" action="list" >
<cffile action="read" file="#inputFilePath#\#name#" variable="Variables.EncryptedCSVData" />
<cfexecute name="C:\Program Files (x86)\GNU\GnuPG\gpg2" arguments="--passphrase=#gKeyPassphrase# --batch -o #inputFilePath# -d -r #gEncryptionKeyID# ouputfile=#outputpath#/test.csv" timeout="300"></cfexecute>
<cfcatch type="any">
<!--- I tried emailing a cfdump of the error to myself but it didn't work --->
</cfcatch>
</cftry>
当我手动运行调度程序时,“此计划任务已成功完成”。显示在CF Admin中,但未创建解密文件,我也没有收到任何错误报告电子邮件。
如果有人能帮我解决这个问题,我将非常感激。
谢谢。
答案 0 :(得分:1)
(注意:我假设您首先从命令行验证了上述文件设置是否成功。如果没有,请返回并先执行此操作)
如果这是您的实际CF代码,则它包含一些语法错误。 arguments
属性后没有结束引号,outputfile
属性后也没有引号(也是拼写错误)。所以CF代码应该编译,但可能不会产生任何输出文件。尝试修复引号,你应该得到一些输出,即使它只是一个错误:
<cfexecute name="C:\Program Files (x86)\GNU\GnuPG\gpg2.exe"
arguments="--passphrase=#gKeyPassphrase# --batch -o #inputFilePath# -d -r #gEncryptionKeyID#"
outputfile="#outputpath#/test.csv"
timeout="300">
</cfexecute>
此外,虽然我不熟悉gpg2,但快速搜索表明-o
参数用于输出文件。然而在你的CF代码中,路径来自一个名为#inputFilePath#
的变量,这似乎有点奇怪。假设它不仅仅是一个不幸的命名选择,您可能还想检查文件路径。