Вопрос

Я пытаюсь перевести файл из моего приложения 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();
 }
}
Это было полезно?

Решение

Проверьте Часто задаваемые вопросы:

В: Почему мои файлы повреждены после передачи?

A: Наиболее распространенной причиной для этого является то, что файл переносится как ASCII, но содержимое файла не является ASCII, а файл должен передаваться как двоичный. RFC 959 говорит, что режим передачи по умолчанию должен быть ASCII. Ftpclient соответствует стандарту. Вы должны явно вызовать SetFileType (ftp.binary_file_type); Чтобы запросить бинарный режим передачи после входа на FTP -сервер.

Вызов setFileType(FTP.BINARY_FILE_TYPE);

Другие советы

FTP имеет два режима ASCII (обычно по умолчанию) и двоичный. Если вы передаете что -то другое, то текст, вы должны установить клиент в двоичный режим.

Как установить режим зависит от реализации клиента FTP, но для общин.http://commons.apache.org/net/api/org/apache/commons/net/ftp/ftpclient.html#setfiletype(int)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top