2013-10-30 69 views
2

我正尝试使用CFFTP登录buy.com的市场并下载帐户的订单。 Buy.com允许您将FTP登录到您的账户文件夹中,并将您的订单作为TXT文件下载以供您自己参考。我知道我的证书工作正常,因为我可以使用任何FTP桌面程序成功登录,所以这不是问题。ColdFusion CFFTP action =“listdir”什么都不会返回

我有什么问题实际上是列出了FTP根文件夹的内容。我应该看到文件夹这样的:

  • 取消
  • 履行
  • 库存
  • NewSku
  • 订单
  • 付款
  • 退款

文件夹 “订单”包含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> 

而这些结果在浏览器中看到的(“查询”基本目录列表的空VAR转储):

Successful open? YES 

query 

Successful close? YES 
+0

删除''标签,看它是否有效。 –

+0

这并没有太大的作用。我补充说,因为当action =“listdir”运行时,它显然失败了,所以名称=“dirlist”不会被填充。如果我不为它添加cfparam,那么我得到一个非指定变量的异常。 –

+0

好吧,然后我会在'cfftp'调用周围放置一个'cftry \ cfcatch'代码块并转储出错。你知道怎么做吗?如果没有,我可以帮忙。请回复您从'cfftp'调用收到的错误消息。 –

回答

2

后有这么多坐立不安,我放弃了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() /> 

我应该写博客张贴这个:)

0

我发现,有些FTP服务器需要的目录路径的末尾通配符星号:

<cfftp connection="myConnection" 
    action="listdir" 
    stopOnError="yes" 
    name="dirlist" 
    directory="/Orders/*" 
    /> 

我也通常会添加passive=true

+0

刚刚尝试过你的建议,但他们也没有工作。 –