当FTP仍在上传时,另一个客户端使用(删除/移动)文件时,FTPClient(org.apache.commons.net.ftp.FTPClient)会挂起。 以下是我上传文件的代码:
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 :(得分:0)
我尝试重现您的情况,但是当我尝试在上传过程中修改文件时,服务器回复450代码并且不允许删除文件。
顺便说一句,由于Commons-net API文档很少,您可以尝试调用ftp.getReplyCode()
方法,在completePendingCommand()
调用之前找出确切发生的情况。
然后,您可以匹配this table中的回复代码,并决定做什么"切换"回复代码。