2011-07-11 12 views
5

Apache Commons NetでFTPクライアントを実装したいのですが、データをアップロードするだけです。 FTPサーバーへの接続とログインは正常に動作します。 アップロードは正しく機能しません。 ファイルはオリジナルと少し大きくなります。 ファイルが壊れています。 イメージ、ビデオ、テキストファイルを試しました。テキストファイルのみが問題ありません。 Apache Commons FTPの問題

boolean tmp=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 

は私に falseを与えるデバッグ中

は今、私が参照してください。だからそれを設定することはできません。どうして? (たぶん、これは問題ではないのですか?)ここで

私のコードの残りの部分

client=new FTPClient(); 

    try {   
     int reply; 
     client.connect(url, port); 
     reply = client.getReplyCode(); 

     if (!FTPReply.isPositiveCompletion(reply)) 
     { 
      client.disconnect(); 
      System.err.println("FTP server refused connection."); 
      System.exit(1); 
     } 


     client.login(user, pw); 
     boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 
     client.setControlKeepAliveTimeout(300); 
     client.enterLocalPassiveMode(); 

if (client.isConnected()) 
    { 
    try { 
     File file=new File(<FILE>); 
     FileInputStream inputStream = new FileInputStream(file); 
     OutputStream outputStream = client.storeFileStream(file.getName()); 

      byte[] buffer = new byte[4096]; 
      int l; 
     while((l = inputStream.read(buffer))!=-1) 
       { 
       outputStream.write(buffer, 0, l); 
      } 

      inputStream.close(); 
      outputStream.flush(); 
      outputStream.close();} 

答えて

11

変更以下:

boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 

は次のようになります。

boolean xxx=client.setFileType(FTP.BINARY_FILE_TYPE); 

あなたはファイルタイプでFileTransferModesを混同しています。

利用可能なファイル形式は、次のとおり

利用可能FileTransferModesである:

Apacheはこれらの定数のタイプの列挙型を導入した場合、私が思う、そして、この種の問題を避けることができたが、その後ライブラリが利用できないでしょうプリjava-5ランタイムに
私はJava 1.4の互換性の問題のどれくらいが本当に問題なのでしょうか。

2

のみテキストファイルが正常に転送された場合、私はあなたがバイナリ転送ファイルタイプを設定する必要が疑われます。

これを行う方法については、setFileTypeメソッドを参照してください。

commons-net wikiには、ほとんどのファイル破損の問題の原因が記載されています。

+0

こんにちは、私はそれを試みましたが、方法は私に偽を与えるので、モードを設定することはできません。 – Igor

+0

このメソッドは、connectメソッドの呼び出し後にいくつか試しましたか? –

+0

またログインメソッドの後。 –

関連する問題