ftp上传下载-----打包下载、以流的形式传到前台页面

来源:互联网 发布:杨锦荣 知乎 编辑:程序博客网 时间:2024/06/11 08:54
package com.zhph.util;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Date;import java.util.List;import java.util.UUID;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;import org.apache.log4j.Logger;import com.zhph.vo.cases.FileAttachment;public class FtpUtil {    private static Logger logger = Logger.getLogger(FtpUtil.class.getName ()) ;    private static FTPClient ftp;    public static boolean connectFtpClient() throws Exception{    boolean flag=false;    //ftp服务器登录凭证    String ftpHost=ConfigHelper.getPropertiseValueFromContext("ftpHost");// FTP服务器host    int port=Integer.parseInt(ConfigHelper.getPropertiseValueFromContext("ftpPort"));// FTP服务器端口    String username=ConfigHelper.getPropertiseValueFromContext("ftpUserName");// FTP登录账号    String password=ConfigHelper.getPropertiseValueFromContext("ftpPassword");// FTP登录密码        ftp = new FTPClient();        ftp.setControlEncoding("GBK");        int reply;        ftp.setConnectTimeout(10000);        ftp.connect(ftpHost, port);// 连接FTP服务器        // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器        ftp.login(username, password);// 登录        reply = ftp.getReplyCode();        if (!FTPReply.isPositiveCompletion(reply)) {            ftp.disconnect();            logger.info("FTP server refused connection.");            return flag;        }        //设置PassiveMode传输   设为被动         ftp.enterLocalPassiveMode();        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);        flag=true;        return flag;    }    /**     * 关闭ftp连接     */    public static void closeFtp(){        if (ftp!=null && ftp.isConnected()) {            try {                ftp.logout();                ftp.disconnect();            } catch (IOException e) {                e.printStackTrace();            }        }    }    /**     * Description: 向FTP服务器上传文件     * @Version      1.0     * @param path  FTP服务器保存目录     * @param filename  上传到FTP服务器上的文件名     * @param input   输入流     * @return 成功返回true,否则返回false *     */    public static boolean uploadFile(            String path, // FTP服务器保存目录            String filename, // 上传到FTP服务器上的文件名            InputStream input // 输入流    ){        boolean result = false;        try {            if(connectFtpClient()){            if(!StringHelper.isEmptyString(path)){            String[] paths = path.split("/");            for(int i=0;i<paths.length;i++){                if(!ftp.changeWorkingDirectory(paths[i])){                    ftp.makeDirectory(paths[i]);                    ftp.changeWorkingDirectory(paths[i]);                }            }            }else{                ftp.makeDirectory(path);                ftp.changeWorkingDirectory(path);            }            if(!ftp.storeFile(filename, input)){                logger.info("无读写权限:"+filename);                return result;            }            input.close();            result = true;            }        } catch (Exception e) {            e.printStackTrace();        } finally {            closeFtp();        }        return result;    }    /**     * ftp文件下载     * ypg 2017-3-10     * @param request     * @param response     * @param txtFileDir     */    public static void downFile(HttpServletRequest request, HttpServletResponse response,FileAttachment fileAttachment){        logger.info(new Date()+"  开始进入ftpDownload下载");            try            {                if(connectFtpClient()){                //检索ftp目录下所有的文件,利用时间字符串进行过滤                boolean dir = ftp.changeWorkingDirectory(fileAttachment.getFileAttachmentPath());                if (dir)                 {                     FTPFile[]fs = ftp.listFiles();                     for(FTPFile f:fs)                    {                        if(f.getName().equals(fileAttachment.getFileAttachmentName()))                       {                           response.reset();                         response.addHeader("Content-Disposition", "attachment;filename=" + new             String(fileAttachment.getFileAttachmentTitle().replaceAll(" ", "").getBytes("utf-8"), "iso8859-1"));                         response.addHeader("Content-Length", "" + f.getSize());                         OutputStream os = new BufferedOutputStream(response.getOutputStream());                         response.setContentType("application/octet-stream");                         ftp.retrieveFile(f.getName(),os);                         os.flush();                         os.close();                         logger.info(new Date()+"  ftpDownload下载文件成功");                        }                    }                }              }            }             catch (Exception e)            {                e.printStackTrace();                logger.info(new Date()+"  ftpDownload下载文件发生错误");            }            finally            {                closeFtp();              }             }    /**     * ftp文件打包zip下载     * ypg 2017-3-10     * @param request     * @param response     * @param txtFileDir     */    public static void downZipFile(HttpServletRequest request, HttpServletResponse response,List<FileAttachment> fileAttachments){        logger.info(new Date()+"  开始进入ftpZipDownload下载");        File tempFile =null;        ZipOutputStream out =null;         String directory=Files_Utils_DG.getTempAbsolutePath(request, ConfigHelper.getPropertiseValueFromContext("temp.download.path"));         File fileDirectory=new File(directory);        try            {            tempFile = File.createTempFile(UUID.randomUUID().toString(), ".zip", fileDirectory);            if(connectFtpClient()){                InputStream inputStream;                byte[] buf = new byte[1024];                // Create the ZIP file                // ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));             out = new ZipOutputStream(new FileOutputStream(tempFile));              for(FileAttachment fileAttachment:fileAttachments){                 //检索ftp目录下所有的文件,利用时间字符串进行过滤                boolean dir = ftp.changeWorkingDirectory(fileAttachment.getFileAttachmentPath());                if (dir)                 {                     FTPFile[]fs = ftp.listFiles();                     for(FTPFile f:fs)                    {                        if(f.getName().equals(fileAttachment.getFileAttachmentName()))                       {                             out.putNextEntry(new ZipEntry(fileAttachment.getFileAttachmentTitle()));                           ftp.retrieveFile(f.getName(),out);                           out.closeEntry();                         logger.info(new Date()+"  ftpZipDownload打包文件"+f.getName());                        }                    }                    logger.info(new Date()+"  ftpZipDownload下载文件至"+directory);                  }            }                    response.reset();                    // 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名                    response.addHeader("Content-Disposition", "attachment;filename=" + new String(tempFile.getName().replaceAll(" ", "").getBytes("utf-8"), "iso8859-1"));                    response.addHeader("Content-Length", "" + tempFile.length());                    response.setContentType("application/octet-stream");                    OutputStream os = new BufferedOutputStream(response.getOutputStream());                    inputStream = new BufferedInputStream(new FileInputStream(tempFile));                    int len;                         while ((len = inputStream.read(buf)) > 0) {                             os.write(buf, 0, len);                         }                    os.flush();                    //一定要关闭流                    os.close();                    inputStream.close();                    logger.info(new Date()+"  ftpZipDownload下载文件成功:"+tempFile.getName());              }            }catch (Exception e)            {                e.printStackTrace();                logger.info(new Date()+"  ftpDownload下载文件发生错误");            }            finally            {                closeFtp();                if(out!=null){                   try {                    out.close();                } catch (IOException e) {                    e.printStackTrace();                }                }                logger.info("删除文件:"+tempFile.delete());            }           }           /**             * ftp文件下载展示            * ypg 2017-3-10            * @param request            * @param response           * @param txtFileDir           */           public static void downFileDisplay(HttpServletRequest request, HttpServletResponse                                              response,FileAttachment fileAttachment,String contenType){                         logger.info(new Date()+"  开始进入ftpDownload下载");            try            {                if(connectFtpClient()){                //检索ftp目录下所有的文件,利用时间字符串进行过滤                boolean dir = ftp.changeWorkingDirectory(fileAttachment.getFileAttachmentPath());                if (dir)                 {                     FTPFile[]fs = ftp.listFiles();                     for(FTPFile f:fs)                    {                        if(f.getName().equals(fileAttachment.getFileAttachmentName()))                       {                           response.setHeader("Content-Type",contenType);                         OutputStream os = new BufferedOutputStream(response.getOutputStream());                         ftp.retrieveFile(f.getName(),os);                         os.flush();                         os.close();                         logger.info(new Date()+"  ftpDownload下载文件成功");                        }                    }                }              }            }             catch (Exception e)            {                e.printStackTrace();                logger.info(new Date()+"  ftpDownload下载文件发生错误");            }            finally            {                closeFtp();              }         }    }
0 0