JAVA WEB 批量文件下载
来源:互联网 发布:c语言解惑 这本书 编辑:程序博客网 时间:2024/05/11 16:39
JAVA WEB 批量文件下载
最近需要这个所以写了一个例子
一般批量下载由以下步骤组成:
1、确定下载的源文件位置
2、对文件进行打包成临时文件,这里会用到递归调用,需要的嵌套的文件夹进行处理,并返回文件保存位置
3、将打包好的文件下载
4、下载完成将打包的临时文件删除
</pre><pre name="code" class="java">下面的代码中鉴于简单方便,作为例子使用,使用纯的jsp实现下载,没有配置成servlet,
下载时使用JS事件模拟功能直接请求JSP文件方式,如果需要使用servlet方式,
可把jsp中的java代码搬到servlet中
</pre><pre name="code" class="java">JAVA java 代码:
package com.downloadZip;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class DownloadZip {private static int BUF_SIZE = 1024*10;public static void main(String[] args) {try {File f = new DownloadZip().createZip("D:/img","D:/imgs","img");System.out.println(f.getPath());} catch (IOException e) {e.printStackTrace();}}/** * 创建压缩文件 * @param sourcePath 要压缩的文件 * @param zipFilePath 文件存放路徑 * @param zipfileName 压缩文件名称 * @return File * @throws IOException */public File createZip(String sourcePath ,String zipFilePath,String zipfileName) throws IOException{ //打包文件名称 zipfileName = zipfileName+".zip"; /**在服务器端创建打包下载的临时文件夹*/ File zipFiletmp = new File(zipFilePath+"/tmp"+System.currentTimeMillis()); if(!zipFiletmp.exists() && !(zipFiletmp.isDirectory())){ zipFiletmp.mkdirs(); } File fileName = new File(zipFiletmp,zipfileName); //打包文件 createZip(sourcePath,fileName);return fileName;} /** * 创建ZIP文件 * @param sourcePath 文件或文件夹路径 * @param zipPath 生成的zip文件存在路径(包括文件名) */ public void createZip(String sourcePath, File zipFile) { ZipOutputStream zos = null; try { zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile),BUF_SIZE)); writeZip(new File(sourcePath), "", zos); } catch (FileNotFoundException e) { throw new RuntimeException(e); } finally { try { if (zos != null) { zos.close(); } } catch (IOException e) { throw new RuntimeException(e); } } } /** * 创建ZIP文件 * @param sourcePath 文件或文件夹路径 * @param zipPath 生成的zip文件存在路径(包括文件名) */ public void createZip(String sourcePath, String zipPath) { ZipOutputStream zos = null; try { zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipPath),BUF_SIZE)); writeZip(new File(sourcePath), "", zos); } catch (FileNotFoundException e) { throw new RuntimeException(e); } finally { try { if (zos != null) { zos.close(); } } catch (IOException e) { throw new RuntimeException(e); } } }/** * * @param file * @param parentPath * @param zos */private void writeZip(File file, String parentPath, ZipOutputStream zos) { if(file.exists()){ if(file.isDirectory()){//处理文件夹 parentPath+=file.getName()+File.separator; File [] files=file.listFiles(); for(File f:files){ writeZip(f, parentPath, zos); } }else{ DataInputStream dis=null; try { dis=new DataInputStream(new BufferedInputStream(new FileInputStream(file))); ZipEntry ze = new ZipEntry(parentPath + file.getName()); zos.putNextEntry(ze); byte [] content=new byte[BUF_SIZE]; int len; while((len=dis.read(content))!=-1){ zos.write(content,0,len); zos.flush(); } zos.closeEntry(); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); }finally{ try { if(dis!=null){ dis.close(); } }catch(IOException e){ throw new RuntimeException(e); } } } } } /** * 刪除文件 * @param file * @return * @throws Exception */public boolean delFile(File file) throws Exception {boolean result = false; if(file.exists()&&file.isFile()) { file.delete(); file.getParentFile().delete(); result = true; } return result; }}
JSP 代码
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%><%@ page import="java.net.*"%><%@ page import="java.io.*"%><%@ page import="com.downloadZip.*"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK"><title>Insert title here</title></head><body><%// 创建压缩包并返回压缩包位置 DownloadZip downloadZip = new DownloadZip();File zipfile = downloadZip.createZip("D:/img","D:/imgs","img"); String path=zipfile.getPath(); // 获取文件名 String fileName=path.substring(path.lastIndexOf("\\")+1); System.out.println(fileName); //制定浏览器头 //如果图片名称是中文需要设置转码 response.setCharacterEncoding("GBK"); response.setContentType("application/x-download");//设置为下载application/x-download response.setHeader("content-disposition", "attachment;fileName="+URLEncoder.encode(fileName, "GBK")); InputStream reader = null; OutputStream outp = null; byte[] bytes = new byte[1024]; int len = 0; try { // 读取文件 reader = new FileInputStream(path); // 写入浏览器的输出流 outp = response.getOutputStream(); while ((len = reader.read(bytes)) > 0) { outp.write(bytes, 0, len);
<pre name="code" class="html"><span style="white-space:pre"></span>outp.flush();} out.clear(); out = pageContext.pushBody(); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); }
<span style="white-space:pre"></span>//这里貌似不能关闭,如果关闭在同一个页面多次点击下载,会报错 //if (outp != null) // outp.close(); downloadZip.delFile(zipfile); }%></body></html>
</pre>HTML代码:JS 代码中使用了JS模拟事件的功能<p></p><p></p><pre name="code" class="html"><!DOCTYPE html><html><head><meta charset="GBK"><title>Insert title here</title></head><body><input type="button" value="下载" onclick="ddd()"/><a id="12" href="dwo.jsp" style="display: none;">下载</a><script type="text/javascript">function ddd(){var a12=document.getElementById("12");a12.href = a12.href+"?aa=abs";alert(a12.href);//禁用原来哦 onclick 事件a12.setAttribute("onclick",''); a12.click("return false"); // window.open(a12.href);}</script></body></html>
0 0
- JAVA WEB 批量文件下载
- java 批量下载文件
- java 批量下载文件
- java 批量下载文件
- java批量下载文件
- Java批量下载zip文件
- JAVA上传批量下载文件
- Java批量文件打包下载
- java 批量下载网络文件
- java 文件 批量下载 记录
- Java批量文件打包下载
- java-flex 批量下载文件-压缩下载
- Java web 文件下载
- Java web----文件下载
- Java WEB 文件下载
- java web文件下载
- Java Web文件下载
- java web 文件下载
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
- 14. Longest Common Prefix
- C#继承/this/base/new
- App集成Apple-Pay的实践整理
- OpenCL向量加法
- JAVA WEB 批量文件下载
- [BZOJ1031][JSOI2007]字符加密Cipher 做题笔记
- 百度校招面试题
- hdu 3065 病毒侵袭持续中
- apache_response_headers
- ubuntu 安装trac
- SQL语句得到较为精确的用户年龄
- SharePoint 2013 WebPart 管理工具分享[开源]
- 2017年本博客知识体系引导(更新至2017.3.21)