我正在尝试将文件从Java应用程序传输到FTP服务器 程序工作,文件被传输,但当我在FTO文件夹中打开时,文件已损坏,我认为文件传输过程中丢失了数据包。为什么?我该如何解决这个问题?
另一个问题是,如果我想停止文件上传,如何停止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();
}
}
答案 0 :(得分:7)
查看FAQ:
问:为什么我的文件损坏了 转移?
答:最常见的原因是 当文件被转换为ASCII时 但文件的内容不是 ASCII和文件应该是 转为BINARY。 RFC 959说 默认的传输模式应该是 ASCII。 FTPClient符合 标准。你必须明确地打电话 setFileType(FTP.BINARY_FILE_TYPE);至 之后请求二进制传输模式 登录FTP服务器。
致电setFileType(FTP.BINARY_FILE_TYPE);
答案 1 :(得分:2)
FTP有两种模式ASCII(通常是默认值)和二进制模式。如果要传输其他文本,则必须将客户端设置为二进制模式。
如何设置模式因FTP客户端实现而异,但对于Commons IO请参阅 http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html#setFileType(int)