我正在使用以下代码上传文件。它的工作正常,但问题是在上传过程中任意一个文件被绞死(不知道是什么原因)。
- 可能文件太长了。
- 可能连接无法正常工作。
但它仍然被绞死,最后我必须手动终止它。因此,如果有任何错误,那么我如何能够识别出时间无关紧要,只要跳过该文件就会出现一些错误。
FTPClient client = new FTPClient();
FileInputStream fis = null;
try {
client.connect("32.178.10.121");
client.login("XXX", "XXX");
//
// Create an InputStream of the file to be uploaded
//
File f = new File("D:\\FileFolder");
if (f.isDirectory())
{
File[] listFiles = f.listFiles();
for (int i = 0; i < listFiles.length; i++)
{
String filename = listFiles[i].getName();
fis = new FileInputStream(filename);
client.storeFile(filename, fis);
}
}
//
// Store file to server
//
client.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
一个选项是您可以在一个帖子中上传文件。如果花费很长时间,你可以超时这个帖子。
您可以使用 ExecutorService 服务。
检查此链接以了解如何实施ExecutorService: How to timeout a thread
您使用的是apache commons FtpClient吗? 如果是这样,您可以尝试使用 getStatus()来连续轮询状态并在出现错误时关闭。 或者您可以使用 setDataTimeout(int timeout)方法设置超时。
答案 1 :(得分:0)
如果您使用的是JDK 1.7,我建议您尝试降级到1.6。看来FTP在java 7中是错误的,特别是如果你使用的是JDK的库。我正在做一个程序,它只是完全冻结了我的计算机,并且会一直上传,但降级为我工作。如果它是一个更大的应用程序,则使用JDK 1.6设置另一个项目并尝试使用FTP部分。
答案 2 :(得分:0)
您可能想尝试client.setControlKeepAliveTimeout(300);
请参阅(可能重复):Commons FTPClient hangs after uploading large a file