2011-09-09 19 views
1

私は何かを考え出すのに苦労しています。 (私はこれでかなり新しいです。) このjava pgmを書き込んで、大きなファイルを宛先サーバにftpしました。FTPクライアントの問題

public static void ftpUpload(String path, String upfileName, String dirName) throws Exception 
{ 
    FTPClient client = new FTPClient(); 
    client.addProtocolCommandListener((ProtocolCommandListener) new PrintCommandListener(new PrintWriter(System.out))); 
    client.enterLocalPassiveMode(); 

    FileInputStream fis = null; 

    int reply; 

    try { 
     client.connect(ftpserver); 
     client.login(ftpuserid, ftppasswd); 
     reply = client.getReplyCode(); 

     if(FTPReply.isPositiveCompletion(reply)){ 
      client.changeWorkingDirectory(ftpdirectoryName + "/" + dirName); 

      boolean mkDir = client.makeDirectory(getCurrentMMMYY().toLowerCase()); 

      client.changeWorkingDirectory(getCurrentMMMYY().toLowerCase()); 

       //Create an InputStream of the file to be uploaded 
      fis = new FileInputStream(path + upfileName); 

      //Store file to server 
      client.storeFile(upfileName, fis); 

     }  
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (fis != null) { 
       fis.close(); 
      } 
      client.logout(); 
      //client.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

奇妙な何かが私が送信していたファイルに起こっている... 元サーバー上の私のファイルのいずれかのサイズが82575786で、とき:ここ は(コードが表示のために少し変更されて)のコードです私はこのファイルをftpして、ファイル全体をほぼ送信します。それは実際に82574867を送信します。(欠落している919) 発信元サーバー上の別のファイルは717885です。このファイルをftpすると、ファイル全体がほぼ送信されます。それは実際に717522を送信します。(欠落した363)

ログが抜けて何かがクラッシュしたかどうかを確認しましたが、転送に問題はありませんでした。転送を示す2つのログエントリがあります。

[08/09/11 20:21:13:618 EDT] 00000043 SystemOut O 221 - 717522バイトを1つのファイルに転送しました。 221 - 82574867バイトを1つのファイルに転送しました。

誰の助けも大いにありがたいです。 ありがとう ダン。

+0

私が尋ねることができますだから、whydoes sendfileは1つの入力ストリームしか取らず、うまくいきません。どうも! – 98percentmonkey

答えて

3

バイナリではなくASCIIモードで転送していますか? ASCIIモードは、サーバーとクライアントの設定に応じて、CR/LFをLFに変換します。

Apache's FTPクライアントを使用していますか?

client.setFileType(FTPClient.BINARY_FILE_TYPE); 
+0

Jasonさん、ありがとうございます。ファイルは、バイナリファイルタイプで追加することでもう少し先になりましたが、それでもファイル全体をftpしませんでした。両方のファイルはまだレコードの最後のカップルを取得しませんでした。 –

1

あなたはFTP.BINARY_FILE_TYPEを使用する必要がありますが、十分ではありませんバイナリファイルをアップロードするには:それはデフォルトでASCII、あなたがsetFileTypeBINARY_FILE_TYPEを設定してみてください可能性があると言います。私は、この例ではあなたを助けることを願っていますあなたが唯一の入力ストリームを使用している、とあなたも

OutputStreamを使用する必要が

:あなたが入力AND outpustreamを使用する必要がなぜ

FTPClient client = new FTPClient(); 
client.connect("192.168.30.20"); 
client.login("pwd", "pwd"); 

client.setFileType(FTP.BINARY_FILE_TYPE); 
String path_base = "/myPath/"; 
InputStream fis = new FileInputStream("A.pdf"); 
OutputStream os = client.storeFileStream(path_base+ "B.pdf"); 


byte buf[] = new byte[8192]; 
int bytesRead = fis.read(buf); 
while (bytesRead != -1) { 
    os.write(buf, 0, bytesRead); 
    bytesRead = fis.read(buf);} 

fis.close(); 
os.close(); 
client.completePendingCommand(); 
client.logout(); 
client.disconnect(); 
関連する問題