亲爱的,我的代码有问题。我的ftp客户端有时会挂起,当它使用"ftpClient.retrieveFileStream()"检索文件时。知道我能做什么吗?我正在使用 apache commons FTP 客户端 v3.4。
- 我也尝试使用"ftpClient.retrieveFile()",但它没有任何区别。
- 设置连接和 scoket 超时无济于事
- 设置被动模式没有帮助
-
增加缓冲液无济于事
ftpClient = new FTPClient(); ftpClient.setBufferSize(1024 * 1024); ftpClient.setConnectTimeout(10000); ftpClient.connect(serverAddress); ftpClient.login(userName,password); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); ftpClient.setSoTimeout(10000); log("retriving file " + remoteFilePath + "..."); OutputStream output = new FileOutputStream(localFilePath); InputStream inputStream = ftpClient.retrieveFileStream(remoteFilePath); // here it is sometimes hanging. try { IOUtils.copy(inputStream, output); output.flush(); } finally { IOUtils.closeQuietly(output); IOUtils.closeQuietly(inputStream); ftpClient.completePendingCommand(); }
我检索到的最后一条消息通常如下所示:
19:58:21.145 [main] INFO FTPDAO: retrieving file /Modell/5250/Artikel/25777/lg_keh68bgh_1.jpg...
19:58:21.145 [main] INFO Log4JFTPCommandListener - >> PASV
19:58:21.462 [main] INFO Log4JFTPCommandListener - << 227 Entering Passive Mode (195,216,65,165,168,240)
19:58:21.476 [main] INFO Log4JFTPCommandListener - >> RETR /Modell/5250/Artikel /25777/lg_keh68bgh_1.jpg
19:58:21.490 [main] INFO Log4JFTPCommandListener - << 150 Connection accepted
当我使用调试器挂起程序时,它看起来挂起
java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)
java.net.SocketInputStream.socketRead(FileDescriptor, byte[], int, int, int) line: 116
java.net.SocketInputStream.read(byte[], int, int, int) line: 170
java.net.SocketInputStream.read(byte[], int, int) line: 141
问候马克
我也有这个问题。我把retrieveFileStream
改成了retrieveFile
.它不再挂在那里了。