2012-08-08 13 views
1

我在嘗試使用java上傳文件到我的ftp服務器時遇到了一些問題。 這裏是我的代碼功能:在我的ftp服務器上用JAVA上傳之後的空文件

public static void upload_files(String un, String pw, String ip, String f){ 
    try 
    { 
     FTPClient client = new FTPClient(); 
     client.connect(ip); 
     client.login(un,pw); 
     InputStream is = new FileInputStream(f); 
     client.storeFile("test2",is); 
     is.close(); 

    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    } 

「F」 是我要上傳的文件的路徑(即 「C:\文件MyFile」)。在編譯過程中沒有錯誤,一個文件很好地發送到服務器,但可悲的是空的(0字節)。

我也注意到,即使認爲我有一個非常好的ISP,上傳一些文本(大約40s)也需要相當長的時間。

我事先感謝所有會幫助我的人。

問候,

+0

是否其他文件文件f存在?你正在傳遞一個我注意到的字符串。你也必須關閉FTPClient。你正在使用什麼FTPClient? – RNJ 2012-08-08 21:39:18

+0

@ user846476:回答你關於字符串的問題,是的,我認爲這是正確的方法。當我在Windows資源管理器中複製它時,它會向我打開正確的文件,所以我想這是正確的路徑。關於第二點,我如何關閉ftp客戶端?謝謝我該怎麼做?我認爲這是問題,是的 – 2012-08-08 21:55:13

+0

我試着用「client.disconnect()」,但仍然是同樣的問題。可能不是好的方法嗎? – 2012-08-08 21:59:15

回答

0

好像這個問題已與FTPClient的實施做。你確定這個班是這樣的嗎?

嘗試上傳到不同的服務器或使用不同的類來查找失敗原因。

另外:你確定關閉FileInputStream是你的責任嗎?我可以想象,當它完成時,.storeFile(…)方法會自行關閉它。

+0

它不會更改任何服務器。你建議我使用哪個不同的課程?謝謝;) – 2012-08-08 21:33:17

+0

所以,我檢查了你的第二個建議,我刪除了「is.close()」。但是我仍然有一個空文件:/ – 2012-08-08 21:49:36

+0

我試圖斷開上面寫的變量「客戶端」,但它不起作用,同樣的問題... – 2012-08-08 22:24:12

1

我認爲這可能與文件傳輸模式有關。您可以將轉移模式設置爲二進制。有時您以ASCII格式發送數據時會損壞。 參照 https://superuser.com/questions/82726/how-to-set-binary-mode-by-default-when-ftping-to-a-remote-site

它告訴如何在FTP命令客戶端中設置二進制模式。你也會在FTPClient類中有類似的規定。

剛剛發現,我認爲類似的問題在這裏回答 FTPClient - Java, upload file

+0

我認爲這是更相關的鏈接 – 2012-08-09 07:21:01

0

client.login ftpClient默認協議之前添加這些行是全文只爲你NEAD到specifie binnary模式

client.enterLocalPassiveMode() 
client.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE); 
client.setFileTransferMode(FTP.BINARY_FILE_TYPE);