2009-06-30 41 views
0

在我們的一個項目中,我們使用的是Apache的FTP客戶端API。 我必須將xml文件上傳到FTP服務器,其中一個進程將繼續輪詢該服務器目錄。因此,使用上傳API,我上傳帶有.TRANSFER擴展名的xml文件,並且在成功上傳完整文件後,該文件將被重命名爲.xml文件。FTP上傳問題 - 傳輸0個字節

我面對的奇怪問題是,有時文件的文件大小是0字節。但相同的文件有時會完全上傳。當我查看日誌文件時,傳輸的字節僅爲0 kb。所以我不確定可能是什麼問題。

我使用的是linux服務器和Apache的commons的FTP客戶端API。

任何調試技巧和竅門都會有所幫助。

問候, SRINIVAS

回答

0

嘗試運行Wireshark的,看看有什麼是跨線走向何方?這可能會讓你知道問題出在哪裏。

http://www.wireshark.org/

1

如果有時會發生,它聞起來像上的端部中的一個的防火牆配置。很難診斷,但開始(如果可以的話)嘗試在主動/被動之間切換。

在這裏尋找一個更好的參考:http://slacksite.com/other/ftp.html

3

我也遇到了這個而回。

我注意到如果文件大於一定的大小(對我來說大約是174字節),它確實得到了正確的傳輸。較小的文件最終被創建爲零字節文件。

我相信這是Apache公用程序ftp代碼中的一個錯誤。我通過獲取源代碼來修復它,並做了一個快速修復,我生成的jar爲我們工作。

如果我記得修復的權利,我在套接字上用socket.setTcpNoDelay(false)禁用了Nagle的算法,該套接字被用於公用ftp代碼中的傳輸。

1

另一個可能的防火牆配置問題:如果你是從配置了iptables的linux/unix盒子進行ftp'ing,請確保你已經配置了允許ftp「連接跟蹤」的表格。

在ftp事務的過程中,客戶機建立ftp連接,然後發出ftp STOR命令上傳文件。交易的初始部分在標準ftp套接字(20,21)上進行,然後在處於ACTIVE模式時切換到由ftp服務器選擇的隨機高編號端口,或者在處於PASSIVE(PASV)模式時由客戶端選擇。如果你處於ACTIVE模式,iptables可能不允許服務器在這個隨機選擇的端口上與你的客戶機進行通信,你將得到一個零字節的文件,其名稱正確並且沒有其他數據。

您可以從客戶端,或者在客戶機上設置的iptables做「連接跟蹤」交易切換到被動模式解決這個問題:

http://www.linuxchix.org/content/courses/security/connection_tracking

0

檢查您的磁盤容量。我在做Raspberry Pi項目時面臨這種情況。我不得不處理大文件下載,並導致快速填滿RPi的SD卡。達到一定程度後FTP上傳0個字節的文件。 不僅適用於小存儲,這可能會發生在任何地方。例如,您的服務器可以創建千兆字節的錯誤日誌文件。一段時間後,您的服務器空間將由這些日誌文件填充。同樣的事情發生在FTP上傳上。檢查一下。乾杯!