2013-12-19 106 views
1

我正在開發一個使用Spring MVC的應用程序。在業務流程中,會生成一個圖像文件,需要從應用程序服務器中檢索到Web服務器。我正在使用commons-net API來以簡單的方式進行操作。java:多線程,多用戶web應用程序中的FTP

public class FtpUtility{ 
private FTPClient ftpClient = new FTPClient(); 

public boolean retriveFileFromApp(String srcFile, String destFile){ 
    boolean flag = false; 
    try{ 
     connectToFtp() 
     File dest = new File(destFile); 

     if(!dest.exists()) 
      dest.mkdirs(); 
     if(dest.exists()) 
      dest.delete(); 
     FileOutputStream destStream = new FileOutputStream(dest); 
     ftpClient.retrieveFile(srcFile, destStream); 

    } 
    catch(Exception e){ 
     //exception handling 
    } 
    finally{ 
     disconnect(); 
    } 
    return flag; 
} 



private boolean connectToFtp(){ 
    boolean flag = false; 
    try{ 
     ftpClient.connect(appserverip); // connect to ftp 
     flag = ftpClient.login(ftpUserId, ftpPassword); 
    }   
    catch(Exception e){ 
     //exception handling 
    } 

    return flag; 
} 

private void disconnect(){ 
    try{ 
     ftpClient.logout(); 
     ftpClient.disconnect(); 
    } 
    catch(Exception e){ 
     //some exception handling 
    } 

} 
} 

現在同時有多個用戶使用該應用程序,將它們同時使用這個類的一個實例,然後斷開連接。即使一個用戶正在連接和斷開每個文件傳輸。

  1. 我怎樣纔能有效地做到這一點像連接一次,然後做所有傳送,然後斷開連接,無法打開和關閉每次傳輸的連接。

  2. 會使用靜態幫助嗎?如果是的話如何?

+0

您正在連接到ftp並斷開連接。在這兩個操作之間,您可以根據需要傳遞儘可能多的文件。 –

+0

它實際上是在每個業務流程中生成條形碼,並將條形碼轉移到網絡服務器以顯示在網頁上。無法爲一個業務流程轉移多個文件 – ares

回答

0

這是行不通的。無論是FTP客戶端是靜態的,您連接一次並通過同步串行使用它,或者它是每個會話,每個會話創建並連接並使用它自己的同時。你目前的混合物都無法工作。

+0

對不起,我複製粘貼代碼時未刪除靜態文件。我正在嘗試那件事。現在編輯這個問題。 – ares