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
- ftp上传下载-----打包下载、以流的形式传到前台页面
- java 后台把数据以图片的形式传到前台
- 以流的形式将文件写入页面,直接下载
- 前台将实体对象以json串形式传到后台并解析
- 前台页面以url形式向后台传递数组
- 前台页面传到后台的中文数据出现乱码问题
- 以FTP的形式上传文件
- 以脚本的形式使用ftp服务器
- 在action封装数组,将其传到jsp页面,以checkbox形式显示
- 图片以流的形式显示到页面
- 以流的形式发送压缩文件到页面
- asp.net以字符流的形式下载文件
- zxing生成二维码以流式传到页面
- java 前台页面传到后台 乱码解决方案
- JS实现页面HTML内容以另存为的文件形式下载保存
- 将页面以excel的形式导出
- oss以附件的形式下载文件
- AngularJs 表单提交数据不能以key-value 形式传到后台的解决方案
- Zookeeper的Watcher
- 创建手机页面
- 梯度下降的一阶泰勒公式展开证明
- Python操作中出现中文乱码等问题
- Android Vitamio播放视频有声音无图像问题解决
- ftp上传下载-----打包下载、以流的形式传到前台页面
- linux(ftp服务器) vsftpd 配置文件详解
- 机器学习及其基础概念简介
- foreach简化数组和集合的遍历
- Linux 下浏览器速度对比,人气最高的速度却不给力
- 一切都是对象,一切都是指针
- 接口性能测试--JMeter
- 解决C# 报VBIDE和EXCEL引用出错问题
- 架包插件调框架方法