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, чтобы увидеть, что пошло не так.

Другие вопросы по тегам