2011-01-19 57 views
2

我试图将文件从我的Java应用程序传输到FTP服务器 程序工作,文件传输,但是当我走在FTO文件夹打开,该文件已损坏,我认为数据包在文件传输过程中丢失。为什么?我该如何解决这个问题?的Java:上传文件到FTP问题(数据包丢失)

另一个问题,我怎么能停止while如果我想停止文件上传?

谢谢大家!

我的类中的代码:

FTPClient client = new FTPClient(); 
InputStream is = null; 
//... 
try{ 
client.connect(MY_FTP_URL); 
client.login(USER, PASS); 
InputStream is = new FileInputStream(file_path); 
OutputStream os = client.storeFileStream(file_name); 
byte[] buffer = new byte[1024]; 
int len; 
//I use this way to check the transfer progress 
while((len = is.read(buffer)) != -1){ 
    os.write(buffer, 0, len); 
    os.flush(); 
} 
os.close(); 
} catch (IOException e){ 
e.printStackTrace(); 
} finally{ 
try{ 
    if(is != null){ 
    is.close(); 
    } 
    client.disconnect(); 
} catch(IOException e){ 
    e.printStackTrace(); 
} 
} 
+4

(1)不写这个自己,使用图书馆(2)不使用FTP,除非你绝对必须使用[SCP via JSch](http://seancode.blogspot.com/2008/02/jsch-scp-file-in-java.html)。 – 2011-01-19 02:32:25

+4

不知道你的问题是什么,但它几乎肯定不是“数据包丢失” - FTP分层在TCP之上,它提供了一个可靠的字节流。 – 2011-01-19 02:42:31

回答

7

退房的FAQ

问:为什么我的文件后 转移腐败?

答:造成这种情况的最常见原因是 当文件被转移为ASCII 但文件的内容不 ASCII和文件应 传输二进制数据。 RFC 959说 默认传输模式应该是 ASCII。 FTPClient符合 标准。您必须明确地调用 setFileType(FTP.BINARY_FILE_TYPE);到 请求登录到FTP服务器的 后的二进制传输模式。

呼叫setFileType(FTP.BINARY_FILE_TYPE);