Apache FTPC客户端。将内存中的文本写入FTP服务器上的文件

我的Android应用(最小API 24,目标API 27,Java 8)使用Apache的 FTPClient 来连接到FTP服务器。此刻我正试图将一些文字写入服务器上的一个文件(文件在手机上不存在!),但失败了。

login(); //logs in and leaves the connection open
ftpClient.enterLocalPassiveMode();

if(ftpClient.changeWorkingDirectory(folder)) {
    OutputStream os = ftpClient.storeFileStream(File.separator+filename);
    BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(os,StandardCharsets.UTF_8)));
    bw.write(text);
    bw.close();

    if(ftpClient.completePendingCommand()) {
        //Success!
    } else {
        //Failed
    }
} else {
    //Show error because folder doesn't exist
}

这个文件通常在服务器上并不存在 而且,当它被创建时,它总是空的。

日志为之。

CWD 
250 CWD command successful.
PWD
257 "/" is current directory.
PASV
227 Entering Passive Mode ([IP here]).
STOR /blabla9.txt
125 Data connection already open; Transfer starting.
226 Transfer complete. [called because of "completePendingCommand()"]

问题: 如何使用库将文本写入文件,事先创建一个新的文件(如有必要)?


编辑一下。 我还试着将文本保存到外部存储,然后上传整个文件。

login(); //logs in and leaves the connection open
ftpClient.enterLocalPassiveMode();

if(ftpClient.changeWorkingDirectory(folder)) {
    ftpClient.setFileType(FTP.ASCII_FILE_TYPE);
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
    boolean result = ftpClient.storeFile(filename, bis);
    bis.close();

    if(result) {
        //Success!
    } else {
        //Failed
    }
} else {
    //Show error because folder doesn't exist
}

这样做是可行的,但这只是一个临时的解决方案,因为它需要先将文件写入外部存储器,然后在上传后再删除它。

这个版本的日志。

CWD 
250 CWD command successful.
PWD
257 "/" is current directory.
TYPE A
200 Type set to A.
PASV
227 Entering Passive Mode ([IP here]).
STOR blabla11.txt
125 Data connection already open; Transfer starting.
226 Transfer complete.

解决方案:

对我来说,你的代码是可行的,所以我不知道为什么对你来说不可行。

无论如何,作为 FTPClient.storeFile 你可以使用内存流,像这样。

InputStream is = new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8));
ftpClient.storeFile(filename, is);

你最初问题的答案就在这里 Apache Commons FTP storeFileStream返回null


另外,我很确定文档是错的。它可以调用 FTPClient.storeFileStream 当文件不存在时。

给TA打赏
共{{data.count}}人
人已打赏
未分类

自定义矩阵标题

2022-9-9 4:35:20

未分类

通过骆驼将 sftp 移至 AWS 后,在 sftp 上的连接出现问题。

2022-9-9 4:35:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索