package com.atwp.dowonzip;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DowonZipServlet extends HttpServlet { PRivate static final long serialVersionUID = -5575023666592266887L; public DowonZipServlet() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = "文件打包.zip"; fileName = new String(fileName.getBytes(), "ISO-8859-1"); // 必须转码,否则会丢失中文文件名。 response.setContentType("application/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); // 设置文件名 ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); /* 把需要打包的文件存入数组 */ File[] files = new File[3]; files[0] = new File("F:/OwO/testFiles/imgs/1.jpg"); files[1] = new File("F:/OwO/testFiles/imgs/2.jpg"); files[2] = new File("F:/OwO/testFiles/imgs/3.jpg"); try { byte[] zipFile = zipFile(files, "", zos); response.getOutputStream().write(zipFile); // 输出到页面 } catch (Exception e) { e.printStackTrace(); } finally { // 必须释放以及关闭,否则可能会出现压缩的文件出现损坏。 zos.flush(); zos.close(); } } private byte[] zipFile(File[] subs, String baseName, ZipOutputStream zos) throws IOException { try { byte[] buffer = null; for (int i = 0; i < subs.length; i++) { File f = subs[i]; zos.putNextEntry(new ZipEntry(baseName + f.getName())); FileInputStream fis = new FileInputStream(f); buffer = new byte[1024]; int r = 0; while ((r = fis.read(buffer)) != -1) zos.write(buffer, 0, r); fis.close(); } return buffer; } catch (Exception e) { e.printStackTrace(); return null; } finally { // 必须释放以及关闭,否则可能会出现压缩的文件出现损坏。 zos.flush(); zos.close(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}
新闻热点
疑难解答