2

FTPClient (org.apache.commons.net.ftp.FTPClient) 在 FTP 仍在上传时,当另一个客户端使用(删除/移动)文件时挂起。这是我如何上传文件的代码:

    ftpClient = getFTPConnection();
    BufferedInputStream buffIn = new BufferedInputStream(inputStream);
    byte[] buffer = new byte[8192];
    OutputStream os = ftpClient.storeFileStream(filename);
    int readCount = 0;
    while ((readCount = buffIn.read(buffer)) > 0) {
        os.write(buffer, 0, readCount);
    }

    os.close();
    buffIn.close();
    inputStream.close();

    ftpClient.completePendingCommand(); //!stuck here!
    ftpClient.rename(filename, "uploadRename.txt");
    ftpClient.logout();
    ftpClient.disconnect();

当文件在上传时被删除时, os.write 完成它的工作(没关系。)但是在调用 completePendingCommand() 之后程序卡住了。如果我理解这一点,必须完成 ftpClient.completePendingCommand() 才能发出第二个命令,删除它不是解决方案。任何人都知道为什么 ftpClient 挂起?如果 completePendingCommand 没有从 ftp 得到他想要的东西,我只是期待一个错误消息或超时。

谢谢

4

1 回答 1

0

我试图重现您的情况,但是当我在上传过程中尝试修改文件时,服务器回复 450 代码并且不允许删除文件。

顺便说一句,由于 Commons-net API 文档有点生硬,您可以在调用之前尝试调用该ftp.getReplyCode()方法以找出究竟发生了什么completePendingCommand()

然后,您可以匹配此表中的回复代码,并决定如何“切换”回复代码。

于 2013-07-09T13:42:47.670 回答