Java: загрузить файл в проблему FTP (пакеты потеряны)
-
12-10-2019 - |
Вопрос
Я пытаюсь перевести файл из моего приложения 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)