Java FTPCLient:上传文件,连接丢失后重新连接?

时间:2013-05-03 19:00:34

标签: java ftp-client

我目前正在开发一款将大型PDF上传到服务器的应用。该应用程序工作正常,但有时,因为PDF太大(25MB),上传需要一段时间,通常在30或40分钟后,我得到一个“socketException:破管”。我认为这是由于超时或与服务器断开连接(服务器切断连接我猜),所以我在一个带有try / catch的循环中移动上传例程。抛出异常时,我尝试重新连接。它工作正常。上传从停止并完成的地方开始。

问题?好吧,由于上传在两个部分“破坏”(如果发生任何连接丢失,则更多),上传的文件也被破坏了!我的意思是definatley正常,我不知道为什么会发生这种情况,但我想知道的是如何在尝试重新连接时保持上传“保持”状态。我只是希望能够完成上传,即使有重新连接。我希望我的PDF完全上传。这是我的代码:

// In
inputStream = new FileInputStream(localFile); 

// For upload loop
byte[] bytesIn = new byte[4096];
int read = 0;

// Loop until job is not completed (will try to reconnect if any exception is thrown)
boolean completed = false;
while (!completed){
try{

    // Out
    OutputStream outputStream = ftpClient.storeFileStream(remoteFile);

    // Transfer                 
    while ((read = inputStream.read(bytesIn)) != -1) {
        outputStream.write(bytesIn, 0, read);
        transfered += read;
    }

    // Closing streams
    inputStream.close();
    outputStream.close();

    // Final information
    completed = ftpClient.completePendingCommand();
    if (completed) System.out.println("Done");
    else System.out.println("Failure.");
    completed = true;

} // end try 
catch (Exception e) {

    // Telling the user
    System.out.println("Trying to reconnect...");
    Thread.sleep(1000);

    // Try to reconnect
    ftpClient.connect(server, port);
    success = ftpClient.login(user, pass);
    if (success) {
        System.out.println("Connection : OK");
        Thread.sleep(1000);
    } else {
        System.out.println("Failed to connect");
    }

    // Set passive mode and file type to binary
    ftpClient.enterLocalPassiveMode();
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

} // end catch
} // end loop

我知道我的代码并不完美,但没关系,我不是一个完美主义者:)

任何帮助都会有很大帮助!

问候;

1 个答案:

答案 0 :(得分:1)

我找到了一个替代方法,使用FP4J库进行FTP上传,使用Java支持重新连接/附加到文件。