2011-05-22 93 views
3

我使用以下一段代碼將照片上傳到ftp主機。但照片似乎被上傳後被破壞: 在照片底部有灰色的細線。FTP客戶端(公用網)上傳問題

通過減少FTPClient對象的緩衝區大小可以減少灰線的大小。

import java.io.File; 
import java.io.FileInputStream; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.apache.commons.net.ftp.FTPClient; 
import java.io.IOException; 
import java.io.InputStream; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPReply; 
import sun.misc.Cleaner; 

public class FtpConnectDemo1 { 

    public static void main(String[] args) { 
    FTPClient client = new FTPClient(); 

    try { 
     client.connect("ftp.ftpsite.com"); 

     // 
     // When login success the login method returns true. 
     // 
     boolean login = client.login("[email protected]", "pass"); 

     if (login) { 
     System.out.println("Login success..."); 

     int replay = client.getReplyCode(); 

     if (FTPReply.isPositiveCompletion(replay)) { 
      File file = new File("C:\\Users\\e.behravesh\\Pictures\\me2_rect.jpg"); 
      FileInputStream input = new FileInputStream(file); 
      client.setFileType(FTP.BINARY_FILE_TYPE); 

      if (!client.storeFile(file.getName(), input)) { 
      System.out.println("upload failed!"); 
      }   

      input.close(); 
     } 
     // 
     // When logout success the logout method returns true. 
     // 
     boolean logout = client.logout(); 
     if (logout) { 
      System.out.println("Logout from FTP server..."); 
     } 
     } else { 
     System.out.println("Login fail..."); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
     // 
     // Closes the connection to the FTP server 
     // 
     client.disconnect(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
    } 
} 
+0

我不知道爲什麼它很重要,但你可以分享什麼是服務器的平臺(客戶端是Windows,是不是)?也許這些是一些平臺特定的問題。 – 2011-05-22 18:37:50

+0

客戶端是Windows和Linux(Fedora),服務器也是Linux。我通過Cpanel管理它。 :( – ehsun7b 2011-05-22 18:43:39

回答

2

從來沒有聽說過這種類型的腐敗,但是:你是從防火牆後面上傳的?在致電storeFile之前,請嘗試執行client.enterLocalPassiveMode();

+0

是的,當我在辦公室和公司的防火牆後面試過時,我現在要在家裏檢查它 – ehsun7b 2011-05-22 18:44:32

+0

它有幫助,但本地文件和上傳文件的大小仍然不同。 ? – ehsun7b 2011-05-22 19:26:56

0

我剛剛在我的本地計算機上試過你的代碼,它的工作原理。我沒有看到任何灰線。

所以我想這可能是被動模式的事情,如費米建議或一些網絡/防火牆/低級別的問題。

0

大概晚,但它可以幫助有人爲避免浪費時間。

檢查conf文件和permitions!在Unix中使用VSFTP檢查

WRITE_ENABLE = YES

逗留取消註釋。

如果可以上傳文件,請檢查另一個FTP客戶端。

0

FTP文件發送不是原子的意思,如果在連接中發生崩潰,只發送部分文件。我會提供添加更改名稱,以瞭解在文件發送結束時傳輸何時完成。