2

CFFTP を使用して buy.com のマーケットプレイスにログオンし、アカウントの注文をダウンロードしようとしています。Buy.com では、FTP でアカウント フォルダーに移動し、注文を TXT ファイルとしてダウンロードして参照することができます。任意の FTP デスクトップ プログラムを使用して正常にログインできるため、資格情報が正常に機能していることはわかっているため、問題はありません。

私が問題を抱えているのは、実際に FTP のルート フォルダの内容を一覧表示することです。次のようなフォルダーが表示されるはずです。

  • キャンセル
  • フルフィルメント
  • 在庫
  • NewSku
  • 注文
  • 支払い
  • 払い戻し

「Orders」フォルダには、顧客の注文を含む TXT ファイルが含まれており、最終的にリストを取得したいフォルダです。ただし、CFFTP 呼び出しが正常に接続および切断されているように見えても、空のリスト (以下の「dirlist」変数をダンプすると空のクエリ) が表示されます。ディレクトリを変更して、「/」または「/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
4

2 に答える 2

2

これをいじくりまわした後、私は CFFTP をあきらめました。コードは正しく、資格情報は問題なく、ファイアウォールを介した FTP アカウントへのアクセスをブロックするものは何もありませんでした。

代わりに、 edtftpjで正常に動作する Java ライブラリを見つけました。これは LGPL オープン ソースであり、その API は簡単に理解できます。

そのため、最初に Web サイトから 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-10-31T22:58:39.223 に答える
0

一部の FTP サーバーでは、ディレクトリ パスの末尾にワイルドカード アスタリスクが必要であることがわかりました。

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

私も通常追加しpassive=trueます。

于 2013-11-01T13:57:20.913 に答える