2015-07-21 2 views
0

Я пытаюсь загрузить файл в android на FTP-сервер, используя библиотеку apache.commons.ftp.Apache Commons FTP storeFileStream возвращает null

Примечание: Я использую 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 для тестирования. Использование анонимного входа.

В журнале говорится, что выходной поток имеет значение null.

EDIT: Используя то, что Мартин Прикрилл и получив код ошибки, я обнаружил, что проблема заключается в удалении удаленного файла.

Загрузить в местоположение, а не в каталог.

Например, если файл caled item1.txt удаленный файл должен быть /item1.txt или /someFolder/AnotherFolder/item1.txt, а не /someFolder/AnotherFolder/

ответ

1

FTPClient.storeFileStream method может вернуться null:

OutputStream, через который удаленный файл может быть записан. Если соединение с данными невозможно открыть (например, файл не существует), возвращается значение null (в этом случае вы можете проверить код ответа, чтобы определить точную причину отказа).

Хотя «файл не существует» примечание нонсенс для загрузки, это, очевидно, ошибка копирования и вставки из .retrieveFileStream (скачать).


Используйте .getReplyCode.getReplyString и, чтобы увидеть, что пошло не так.

+0

Код ответа - 553, а строка ответа - «Не удалось создать файл» – Maclaren

+0

Что такое значение 'remoteFile'? –

Смежные вопросы