2015-07-21 99 views
0

我正嘗試使用apache.commons.ftp庫將android中的文件上傳到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服務器進行測試。使用匿名登錄。

日誌一直說輸出流爲空。

編輯:使用什麼馬丁Prikryl和獲取錯誤代碼,我發現問題是遠程文件的位置。

上傳到一個位置而不是目錄。

例如,如果該文件是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」的值是什麼? –

相關問題