我正在尝试使用CFFTP登录and .com的市场并下载一个帐户的订单。Buy.com允许您将FTP传输到您的帐户文件夹中,并以TXT文件的形式下载订单以供您自己参考。我知道我拥有的凭据很好,因为我可以使用任何FTP桌面程序成功地登录,所以这不是问题。
我有什么问题,实际上是列出FTP的根文件夹的内容。我应该看到这样的文件夹:
文件夹" orders“包含带有客户订单的TXT文件,也是我最终想要获得列表的文件夹。但是,我得到了一个空的列表(当我在下面转储"dirlist“变量时,会得到一个空的查询),尽管CFFTP调用看起来连接和断开连接都很好。我尝试更改目录以获得"/“或"/Orders/",甚至是"/Orders”的列表,但都是空的。
这是我的代码(出于显而易见的原因,我编辑了用户名和密码)。任何想法都欢迎。
<cfparam name="dirlist" type="query" default="#queryNew('')#" />
<cfftp connection="myConnection"
username="***************"
password="*********"
server="trade.marketplace.buy.com"
action="open"
stopOnError="yes"
/>
<p>Successful open? <cfoutput>#cfftp.succeeded#</cfoutput></p>
<cfftp connection="myConnection"
action="listdir"
stopOnError="yes"
name="dirlist"
directory="/Orders"
/>
<cfdump var="#dirlist#" />
<cfftp connection="myConnection"
action="close"
stopOnError="yes"
/>
<p>Successful close? <cfoutput>#cfftp.succeeded#</cfoutput></p>这些结果如浏览器所示("query“基本上是目录清单中的空var转储):
Successful open? YES
query
Successful close? YES发布于 2013-10-31 22:58:39
在烦躁了很久之后,我放弃了CFFTP。我不认为我做错了什么,代码是正确的,凭证是好的,没有任何东西阻止通过防火墙访问FTP帐户。
相反,我在edtftpj找到了一个运行良好的Java库。它是LGPL开放源码,它的API非常容易理解。
因此,我首先从他们的网站下载JAR文件,将其放入ColdFusion安装文件夹/bin文件夹,重新启动CF,然后使用以下代码:
<!--- page variables --->
<cfparam name="VARIABLES.ftp" type="any" default="" />
<cfparam name="VARIABLES.aFiles" type="array" default="#arrayNew(1)#" />
<cfparam name="VARIABLES.index" type="numeric" default="1" />
<cfparam name="VARIABLES.cLocalFolder" type="string" default="#expandPath('/integrations/buy/txt/queue/')#" />
<cfparam name="VARIABLES.cLocalFile" type="string" default="" />
<cfparam name="VARIABLES.cFileName" type="string" default="" />
<!--- create instance of edtftpj.jar custom FTP --->
<cfset VARIABLES.ftp = createObject( "java", "com.enterprisedt.net.ftp.FileTransferClient" ) />
<!--- connect with custom java object and get the contents of the 'Orders' folder --->
<cfset VARIABLES.ftp.setRemoteHost( "trade.marketplace.buy.com" ) />
<cfset VARIABLES.ftp.setUserName( "*************" ) />
<cfset VARIABLES.ftp.setPassword( "*************" ) />
<cfset VARIABLES.ftp.connect() />
<cfset VARIABLES.ftp.changeDirectory('/Orders') />
<cfset VARIABLES.aFiles = ftp.directoryList(".") />
<!--- Proceed only if folder has contents --->
<cfif arrayLen(VARIABLES.aFiles)>
<!--- Loop through ftp directory contents (files and folders) --->
<cfloop from="1" to="#arrayLen(VARIABLES.aFiles)#" step="1" index="VARIABLES.index">
<!--- Download only files and not folders --->
<cfif VARIABLES.aFiles[VARIABLES.index].isFile()>
<!--- Set the local file name and download to it --->
<cfset VARIABLES.cFileName = aFiles[VARIABLES.index].getName() />
<cfset VARIABLES.cLocalFile = VARIABLES.cLocalFolder & VARIABLES.cFileName />
<cfset VARIABLES.ftp.downloadFile( VARIABLES.cLocalFile, VARIABLES.cFileName ) />
</cfif>
</cfloop>
</cfif>
<!--- Disconnect --->
<cfset VARIABLES.ftp.disconnect() />我应该写一篇关于这方面的博文:)
发布于 2013-11-01 13:57:20
我发现一些FTP服务器需要目录路径末尾的通配符星号:
<cfftp connection="myConnection"
action="listdir"
stopOnError="yes"
name="dirlist"
directory="/Orders/*"
/>我通常也会添加passive=true。
https://stackoverflow.com/questions/19688365
复制相似问题