下载zip格式文件(压缩Excel文件为zip格式)

时间:2022-05-08 14:36:04

Mongodb配置文件参考这一篇:http://www.cnblogs.com/byteworld/p/5913061.html

package util;
import java.io.BufferedInputStream;
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.ArrayList;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.sun.corba.se.spi.orbutil.fsm.Input;

public class CreateExcel {  
    /**
     * 把文件压缩到zip中
     * @Description:
     * @param   
     * @return void 返回类型
     */
    public static void createZip(String dir,OutputStream out){
        // 用户目录下的文件
        File[] f = new File("E:/"+dir).listFiles();
        // 创建zip文件
        ZipArchiveOutputStream zipOut = null;
        InputStream input = null;
        try {
            zipOut = new ZipArchiveOutputStream(out);
            zipOut.setEncoding("UTF-8");
            zipOut.setUseZip64(Zip64Mode.AsNeeded);
            // 遍历目录下的文件
            for(File file:f){
                if (file != null) {
                    ZipArchiveEntry zipEntry = new ZipArchiveEntry(file, file.getName());
                    zipOut.putArchiveEntry(zipEntry);
                    // 读取文件
                    input = new BufferedInputStream(new FileInputStream(file));
                    byte[] buff = new byte[1024];
                    int len = 0;
                    while((len = input.read(buff)) != -1){
                        zipOut.write(buff, 0, len);
                    }
                    zipOut.closeArchiveEntry();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (zipOut != null) {
                try {
                    zipOut.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
   
    
    /**
     * 创建Excel文件到本地
     * @Description:
     * @param   
     * @return void 返回类型
     */
    public static void createExcel(String userid,String file,DBCursor cursor){
        // 根据用户名创建文件夹
        File dir = new File("E:/" + userid);
        if (!dir.isDirectory()) {
            dir.mkdirs();
        }
        Workbook book = new HSSFWorkbook();
        // 获取标题
        DBObject ob = cursor.toArray().get(0);
        ArrayList<String> title = new ArrayList<>();
        for(String key:ob.keySet()){
            if (key.equals("_id")) {
                continue;
            }
            title.add(key);
        }
        // 创建sheet
        Sheet sheet = book.createSheet();
        OutputStream out = null;
        try {
            // 写入标题栏
            Row row = null;
            // 标题栏的行数
            Cell cell = null;
            for(int i = 0;i< (cursor.count() + 1);i++){
                // 标题栏
                if (i == 0) {
                    row = sheet.createRow(i);
                    for (int j = 0; j < title.size(); j++) {
                        cell = row.createCell(j);
                        // 设置标题栏
                        cell.setCellValue(title.get(j));
                    }
                    continue;
                }
                // 写入数据
                row = sheet.createRow(i);
                out = new FileOutputStream(dir+"/"+file);
                DBObject obj = null;
                for (int j = 0; j < title.size(); j++) {
                    cell = row.createCell(j);
                    obj = cursor.toArray().get(j);    
                    for(String key :obj.keySet()){
                        if (key.equals("_id")) {
                            continue;
                        }
                        if (key.equals(title.get(j))) {
                            cell.setCellValue((String)(obj.get(key)));
                        }
                    }
                }
            }
            // 写入到excel
            book.write(out);
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            try {
                out.flush();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

  JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
        <form method="post">
            <a href="/Demo/SimpleDown"><h2>下载</h2></a>
        </form>
</body>
</html>

  Servlet:

package servlet;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipOutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import com.mongodb.DBCollection;

import util.CreateExcel;
import util.DBConn;

/**
 * 单独文件的zip下载
 */
@WebServlet("/SimpleDown")
public class SimpleDown extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SimpleDown() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response);
	}
	

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//DBCollection conn = DBConn.getConn();
	    DBCollection conn = DBConn.getConn();
	    CreateExcel.createExcel("User2323","weixin_data.xls", conn.find());
	      //createZip("User2323");
	   // CreateExcel.delZip("User2323"); 
	    response.setCharacterEncoding("UTF-8");
	    response.setHeader("Content-Disposition", "attachment;filename="+"User2323.zip");
	    CreateExcel.createZip("User2323", response.getOutputStream());
	
	}
	
	
	 
 
	
}