【问题标题】:Apache Commons FTP storeFileStream returns nullApache Commons FTP storeFileStream 返回 null
【发布时间】:2015-10-11 14:30:04
【问题描述】:

我正在尝试使用 apache.commons.ftp 库将 android 中的文件上传到 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 服务器进行测试。使用匿名登录。

日志一直说输出流为空。

编辑:使用 Martin Prikryl 并获取错误代码,我发现问题出在远程文件的位置。

上传到一个位置而不是一个目录。

例如,如果文件名为item1.txt,则远程文件应为/item1.txt/someFolder/AnotherFolder/item1.txt 而不是/someFolder/AnotherFolder/

【问题讨论】:

    标签: java android ftp apache-commons-net


    【解决方案1】:

    FTPClient.storeFileStream method 可以返回null

    可以写入远程文件的 OutputStream。 如果无法打开数据连接(例如文件不存在),则返回null(此时您可以查看回复码来确定失败的确切原因)。

    虽然“文件不存在”的说明对于上传来说是无稽之谈,但显然是.retrieveFileStream(下载)的复制粘贴错误。


    使用.getReplyCode.getReplyString,看看出了什么问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2012-03-29
      • 2012-12-27
      相关资源
      最近更新 更多