Apache Commons FTP storeFileStream 返回 null

问题描述 投票:0回答:1

我正在尝试使用 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个回答
2
投票

FTPClient.storeFileStream
方法可以返回
null
:

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

虽然“文件不存在”的提示对于上传来说是无意义的,但这显然是来自

.retrieveFileStream
(下载)的复制粘贴错误。


使用

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

© www.soinside.com 2019 - 2024. All rights reserved.