2013-12-19 107 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