ftp批量下载 单个下载

来源:互联网 发布:gif动态图片编辑软件 编辑:程序博客网 时间:2024/04/20 07:26


  String name = request.getParameter("path"); //所下载报告实际在文件服务器上的文件名称
  if(StringUtils.isNotEmpty(name)){
    String typeStr=request.getParameter("type");//报告小子类型,0,销量报告;1,区域报告
    FTPClientUtil  ftpUtil = new FTPClientUtil();
    String [] arr = name.split(","); 
    String filespathStr="";
    if(typeStr.equals("0")){
     filespathStr=Constant.getConfig(Constant.UPLOAD_SALESREPORT_FILEPATH);
    }else {
     filespathStr=Constant.getConfig(Constant.UPLOAD_AREAREPORT_FILEPATH);
    }
    if(arr.length>1){//批量下载
     try {    
      String titles = request.getParameter("titles")!=null?request.getParameter("titles").trim():""; //所下载的所有报告的名称标题
      String [] arrTtitles = titles.split(",");
      String downFileTitles = arrTtitles[0]+"等";
      //生成的ZIP文件名为Demo.zip
      String strZipName = downFileTitles+".zip";
      // 下载文件时显示的文件保存名称
      String filenamedisplay = strZipName;
      // 中文编码转换
      filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8");
      response.addHeader("Content-Disposition", "attachment;filename=" + filenamedisplay);
      ZipOutputStream out = new ZipOutputStream(response.getOutputStream()); 
      ////将多个文件ftp到本地服务器
      ftpUtil.ftpNewDownload(Constant.getConfig(Constant.CPM_FTP_IP),Integer.parseInt(Constant.getConfig(Constant.CPM_FTP_PORT)),Constant.getConfig(Constant.CPM_FTP_USER), Constant.getConfig(Constant.CPM_FTP_PWD),
        filespathStr, Constant.getConfig(Constant.CPM_UPLOAD_DIR),name);
      //压缩多个文件为zip 
      for(int i=0;i<arr.length;i++){
       String fileName = arr[i];
       String   wenjianming  = fileName;
       if(arrTtitles.length>=arr.length)  wenjianming  = arrTtitles[i];
          java.io.OutputStream os = response.getOutputStream();
          File file = new File(Constant.getConfig(Constant.CPM_UPLOAD_DIR)+fileName);
       java.io.FileInputStream fis = new java.io.FileInputStream(file);
       //------------------------------------
       //截取文件名的后缀名
       String houzuiming=fileName.substring(fileName.lastIndexOf("."));
       //设置字符集
       out.setEncoding("GB2312");
        //  out.
       //拼wenjianming+houzuiming
       //wenjianming = new String(wenjianming.getBytes(),"GB2312");
       out.putNextEntry(new ZipEntry(wenjianming+houzuiming));
       int len;
       byte[] buffer = new byte[1024];
       //读入需要下载的文件的内容,打包到zip文件
       while((len = fis.read(buffer))>0) {
        out.write(buffer,0,len );    
       }
       out.closeEntry();
       fis.close();      
       //删除服务器本地的文件
       if(new File(Constant.getConfig(Constant.CPM_UPLOAD_DIR)+fileName).exists()){
        new File(Constant.getConfig(Constant.CPM_UPLOAD_DIR)+fileName).delete();
       } 
         }//end  for
      out.flush();
         out.close();
       } catch (Exception e) {
                    e.printStackTrace();
       }
    }else{//下载单个文件 
       try {    
      String titles = request.getParameter("titles")!=null?request.getParameter("titles").trim():""; 
      String filenamedisplay = titles; 
      filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8");
      response.addHeader("Content-Disposition", "attachment;filename=" + filenamedisplay+name.substring(name.lastIndexOf(".")));    
      ftpUtil.ftpNewDownload(Constant.getConfig(Constant.CPM_FTP_IP),Integer.parseInt(Constant.getConfig(Constant.CPM_FTP_PORT)),Constant.getConfig(Constant.CPM_FTP_USER), Constant.getConfig(Constant.CPM_FTP_PWD),
        filespathStr, Constant.getConfig(Constant.CPM_UPLOAD_DIR),name);
         java.io.OutputStream os = response.getOutputStream();
        java.io.FileInputStream fis = new java.io.FileInputStream(Constant.getConfig(Constant.CPM_UPLOAD_DIR)+name);
      byte[] b = new byte[1024];
      int i = 0;
      while ((i = fis.read(b)) > 0) {
       os.write(b, 0, i);
      }
      fis.close();
      os.flush();
      os.close();
      //删除服务器本地的文件
      if(new File(Constant.getConfig(Constant.CPM_UPLOAD_DIR)+name).exists()){
       new File(Constant.getConfig(Constant.CPM_UPLOAD_DIR)+name).delete();
      } 
       } catch (Exception e) {
        e.printStackTrace();
       }
    }
  }
  

ftp工具类:

public class FTPClientUtil {
 private Log log = LogFactory.getLog(getClass());

 private FTPClient ftpClient = new FTPClient();

 public void disconnect() {
  if (ftpClient != null) {
   try {
    ftpClient.disconnect();
   } catch (IOException ex) {
    log.debug("断开连接失败!");
   }
   ftpClient = null;
  }
 }


 public String connect(String sHost, int port,String user, String password,
   String sDir) {
  try {
   ftpClient.connect(sHost);
   ftpClient.setDefaultPort(port);
   if (log.isDebugEnabled()) {
    log.debug("连接到ftp服务器:" + sHost + " 成功..开始登录");
   }
   // 登录.用户名 密码
   ftpClient.login(user, password);
   if (log.isDebugEnabled()) {
    log.debug("登录成功");
   }

  } catch (IOException e) {
   return "与FTP服务器连接失败!";
  } catch (SecurityException e) {
   return "没有权限与FTP服务器连接";
  } catch (Exception e) {
   return "没有与FTP服务器连接的权限,或用户名密码设置不正确!";
  }
  return "";
 }

 /**
  *
  * @param server
  * @param user
  * @param password
  * @param path
  * @param is
  * @param destFile
  */
 public void ftpUpload(String hostName, String userName, String password,
   String path, InputStream is, String destFile) {
  try {
   ftpClient.connect(hostName);
   if (log.isDebugEnabled()) {
    log.debug("连接到ftp服务器:" + hostName + " 成功..开始登录");
   }
   // 登录.用户名 密码
   ftpClient.login(userName, password);
   if (log.isDebugEnabled()) {
    log.debug("登录成功");
   }

   // path是ftp服务下主目录的子目录
   if (path.length() != 0)
    ftpClient.changeWorkingDirectory(path);
   // 设置传输模式
   ftpClient.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);

   // 写文件
   ftpClient.storeFile(destFile, is);

  } catch (Exception e) {
   log.error(e.getMessage(), e);

  } finally {
   // 使用IO包关闭流
   // IOUtils.closeQuietly(outSteam);
   try {
    ftpClient.disconnect();
   } catch (IOException ioe) {
    log.error(ioe.getMessage(), ioe);
   }
  }
 }

 public void upload(String hostName, String userName, String password,
   String remoteDir, String zoneCode, InputStream inputStream,
   String fileName) {
  try {
   ftpClient.connect(hostName);
   if (log.isDebugEnabled()) {
    log.debug("连接到ftp服务器:" + hostName + " 成功..开始登录");
   }
   // 登录.用户名 密码
   ftpClient.login(userName, password);
   if (log.isDebugEnabled()) {
    log.debug("登录成功");
   }

   // 设置当天日期为目录名
   java.sql.Date curDay = new Date(System.currentTimeMillis());
   ftpClient.makeDirectory(zoneCode);
   // 切换到该目录
   ftpClient.changeWorkingDirectory(zoneCode);
   // 设置当天日期为目录名
   ftpClient.makeDirectory(curDay.toString());
   // 切换到该目录
   ftpClient.changeWorkingDirectory(curDay.toString());

   // 设置传输模式
   // ftpClient.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
   // 写文件
   ftpClient.storeFile(fileName, inputStream);

  } catch (Exception e) {
   if (log.isDebugEnabled()) {
    log.error(e.getMessage(), e);
   }
  } finally {
   // 使用IO包关闭流
   // IOUtils.closeQuietly(outSteam);
   try {
    ftpClient.disconnect();
   } catch (IOException ioe) {
    log.error(ioe.getMessage(), ioe);
   }
  }
 }


 public String ftpDownload(String hostName,int port, String userName, String password,
   String remoteDir, OutputStream os,boolean isChange) throws Exception {
  String returnStr = "";
  try {
   returnStr = connect(hostName,port, userName, password, remoteDir);
   String forder = remoteDir.substring(0, remoteDir.lastIndexOf("/"));
   String fileName = remoteDir.substring(
     remoteDir.lastIndexOf("/") + 1, remoteDir.length());

   log.debug(forder);
   log.debug(fileName);
   // 切换到该目录
   //if(isChange){
       ftpClient.changeWorkingDirectory(forder);
       ftpClient.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
   //}

   // 设置传输模式
   
   // 写文件
   ftpClient.retrieveFile(fileName, os);
  } catch (Exception e) {
   returnStr += e.getMessage();
   e.printStackTrace();
   if (log.isDebugEnabled()) {
    log.error(e.getMessage(), e);
   }
  } finally {
   try {
    disconnect();
    os.close();
   } catch (Exception ioe) {
    returnStr += ioe.getMessage();
    log.error(ioe.getMessage(), ioe);
   }
  }
  return returnStr;
 }
   
 public String ftpNewDownload(String hostName,int port, String userName, String password,
   String remoteDir, String localDir,String filename) throws Exception {
  String returnStr = "";
  OutputStream os=null;
  try {
   returnStr = connect(hostName,port, userName, password, remoteDir);
   String remoteforder = remoteDir.substring(0, remoteDir.lastIndexOf("/"));
   String [] filenames =filename.split(",") ;

   log.debug(remoteforder);
   log.debug(filename);
   // 切换到该目录
   //if(isChange){
      ftpClient.changeWorkingDirectory(remoteforder);
   // 设置传输模式
      ftpClient.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
   //}
   // 写文件
            for(int i=0;i<filenames.length;i++){
             os=new java.io.FileOutputStream(localDir+filenames[i]);
             ftpClient.retrieveFile(filenames[i], os);
            }
  } catch (Exception e) {
   returnStr += e.getMessage();
   e.printStackTrace();
   if (log.isDebugEnabled()) {
    log.error(e.getMessage(), e);
   }
  } finally {
   try {
    disconnect();
    os.close();
   } catch (Exception ioe) {
    returnStr += ioe.getMessage();
    log.error(ioe.getMessage(), ioe);
   }
  }
  return returnStr;
 }
 /**
  * 判断FTP服务器上文件是否存在
  *
  * @param server
  * @param user
  * @param password
  * @param path
  * @param is
  * @param destFile
  */
 public boolean isExistFile(String hostName, String userName,
   String password, String remoteDir, String destFile) {
  try {
   ftpClient.connect(hostName);
   if (log.isDebugEnabled()) {
    log.debug("连接到ftp服务器:" + hostName + " 成功..开始登录");
   }
   // 登录.用户名 密码
   ftpClient.login(userName, password);
   if (log.isDebugEnabled()) {
    log.debug("登录成功");
   }

   ftpClient.changeWorkingDirectory(remoteDir);
   // String[] fileNames = ftpClient.listNames(remoteDir);
   FTPFile[] files = null;
   // ftpClient.changeWorkingDirectory("/");
   files = ftpClient.listFiles();

   for (int i = 0; i < files.length; i++) {
    log.debug(files[i].getName() + "?=" + destFile);
    if (files[i].getName().equals(destFile)) {
     return true;
    }
   }
 
  } catch (Exception e) {
   log.error(e.getMessage(), e);
  } finally {
   try {
    ftpClient.disconnect();
   } catch (Exception ioe) {
    log.error(ioe.getMessage(), ioe);
   }
  }
  return false;
 }

 public static void main(String[] args) {
  FTPClientUtil util = new FTPClientUtil();
  try {

   // util.ftpUpload("192.168.1.29", "sgmftp", "sgmftp#", "upload", new
   // FileInputStream(new File("D://sales.xls")), "sales.xls");

   util.ftpDownload("192.168.1.29",21, "sgmftp", "sgmftp#",
     "upload/swf/128712970.pdf", new FileOutputStream(new File(
       "D://测试w.pdf")),true);

  
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
}


 

 

 

 

 

 

0 0
原创粉丝点击