2011-07-11 149 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

並且在登錄方法之後。 –