2

我正在尝试将文件从我的 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();
 }
}
4

2 回答 2

7

查看常见问题解答

问:为什么我的文件在传输后损坏了?

答:最常见的原因是文件以 ASCII 格式传输,但文件内容不是 ASCII,文件应以 BINARY 格式传输。RFC 959 说默认传输模式应该是 ASCII。FTPClient 符合标准。您必须显式调用 setFileType(FTP.BINARY_FILE_TYPE); 登录 FTP 服务器后请求二进制传输模式。

称呼setFileType(FTP.BINARY_FILE_TYPE);

于 2011-01-19T04:23:03.047 回答
2

FTP 有两种模式 ASCII(通常是默认值)和二进制。如果要传输文本以外的任何内容,则必须将客户端设置为二进制模式。

如何设置模式因 FTP 客户端实现而异,但对于 Commons IO,请参阅 http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html#setFileType(int )

于 2011-01-19T04:25:42.313 回答