Apache Commons FTP storeFileStream возвращает ноль
Я пытаюсь загрузить файл в Android на FTP-сервер с помощью библиотеки apache.commons.ftp.
Примечание: я использую storeFileStream
так что я могу отслеживать ход загрузки.
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
InputStream inputStream = new FileInputStream(localFile);
OutputStream outputStream = ftpClient.storeFileStream(remoteFile);
byte[] buffer = new byte[8192];
int bytesRead;
logMessage("Starting to upload file");
while ((bytesRead = inputStream.read(buffer)) != -1) {
total += bytesRead;
outputStream.write(buffer, 0, bytesRead); //output stream is null here
latestPercentDone = (int) ((total / (float) totalMegaBytes) * 100);
if (percentDone != latestPercentDone) {
percentDone = latestPercentDone;
publishProgress(""+percentDone);
}
}
inputStream.close();
outputStream.close();
ftpClient.completePendingCommand();
Я использую сервер speedtest.tele2.net для тестирования. Использование анонимного входа.
В журнале постоянно говорится, что выходной поток равен нулю.
РЕДАКТИРОВАТЬ: Используя то, что Мартин Прикрыл и получив код ошибки, я обнаружил, что проблема заключается в расположении удаленного файла.
Загрузить в местоположение, а не в каталог.
Например, если файл вызывается item1.txt
удаленный файл должен быть /item1.txt
или же /someFolder/AnotherFolder/item1.txt
скорее, чем /someFolder/AnotherFolder/
1 ответ
FTPClient.storeFileStream
метод может вернуть null
:
OutputStream, через который можно записать удаленный файл. Если соединение для передачи данных не может быть открыто (например, файл не существует), возвращается значение null (в этом случае вы можете проверить код ответа, чтобы определить точную причину сбоя).
Хотя примечание "файл не существует" является нонсенсом для загрузки, очевидно, это ошибка копирования и вставки из .retrieveFileStream
(скачать).
Использовать .getReplyCode
а также .getReplyString
, чтобы увидеть, что пошло не так.