2012-12-07 35 views
2

的FTPClient(org.apache.commons.net.ftp.FTPClient)当其他客户端消耗(删除/移动)的文件,而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。

感谢

回答

0

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

顺便说一句,由于Commons-net API文档很简单,您可以尝试调用ftp.getReplyCode()方法来找出在completePendingCommand()调用之前发生了什么。

然后,您可以在this table匹配答复代码并决定该怎么做“开关”的答复代码。