多个文件生成zip压缩包人后浏览器进行下载

前言

第一次写博客 只是想让自己做一些笔记 以后用到我可以在这里找到

直接上代码(多个文件生成zip 然后浏览器下载代码)

/*
 * $Id:$
 * Copyright 2017 sinounited.com.cn All rights reserved.
 */
package com.sino.ebid.dp.biz;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;

import com.sino.ap.constant.ApYesNoEnum;
import com.sino.ebid.dp.api.DpPreBiderReviewService;
import com.sino.ebid.dp.bo.DpPreBiderReviewGetBO;
import com.sino.ebid.dp.bo.DpPreBiderReviewQueryBO;
import com.sino.ebid.dp.dto.DpPreBiderReviewInsertDTO;
import com.sino.ebid.dp.dto.DpPreBiderReviewUpdateDTO;
import com.sino.ebid.dp.dto.DpPreBiderReviewVerifyDTO;
import com.sino.ebid.dp.qo.DpPreBiderReviewPageQO;
import com.sino.framework.exception.ServiceException;
import com.sino.framework.util.ZipUtils;
import com.sino.framework.util.files.FileInfoModel;
import com.sino.framework.util.files.FileUploadUtils;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.sino.framework.common.page.DataGrid;
import com.sino.framework.model.ResultDTO;
import com.sino.framework.model.utils.ModelUtils;
import com.sino.framework.user.UserContext;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * biz
 *
 * @author Sxing
 * @since 2020年11月9日17:50:39
 */
@Component
public class DpPreBiderReviewBiz {

public void downloadBidFilezip(HttpServletResponse response, Long cbaId) throws Exception  {
    	/*
    	 *根据cbaId查询多个文件 
    	 */
    	List<DpPreBiderReviewGetBO> list =
    			 dpPreBiderReviewService.findByCbaId(cbaId).getData();
    	
    	
    	 byte[] buf = new byte[1024];
    	 
    	    // 获取输出流
    	    BufferedOutputStream bos = null;
    	    try {
    	        bos = new BufferedOutputStream(response.getOutputStream());
    	    } catch (IOException e) {
    	        e.printStackTrace();
    	    }
    	    try {
    	    	//String zipFileName = "资格审查文件";
    	        response.reset(); // 重点突出
    	        // 不同类型的文件对应不同的MIME类型
    	        response.setContentType("application/x-msdownload");
    	        response.setCharacterEncoding("utf-8");
    	        String fileName = "资格审查文件";
    	        //这里我也不知道为啥加这个但是不加中文出不来(如:下载出来应该是<资格审查文件.zip> 但是出现的是<.zip>)
    	         fileName = new String(fileName.getBytes(), "ISO-8859-1");
    	        response.setHeader("Content-disposition", "attachment;filename=" +fileName +".zip");

    	        //文件路径
    	        String str = "d:\\upload";
    	        //java 转义成 windows \\
    	        String line = File.separator;
    	     // ZipOutputStream类:完成文件或文件夹的压缩
    	        ZipOutputStream out = new ZipOutputStream(bos);
    	        //循环多个文件 将每个文件加载到zip中
    	        for (int i = 0; i < list.size(); i++) {
    	            FileInputStream in = new FileInputStream(str+line+list.get(i).getDocSaveUrl());
    	            // 给列表中的文件单独命名
    	            //getRandomZipFileName()方法, 生成当前时间+1000内随机数 如:20201014105810_563
    	            out.putNextEntry(new ZipEntry(getRandomZipFileName()+list.get(i).getDocOldName()));
    	            int len;
    	            while ((len = in.read(buf)) > 0) {
    	                out.write(buf, 0, len);
    	            }
    	            out.closeEntry();
    	            in.close();
    	        }
    	        out.close();
    	        bos.close();
    	        System.out.println("压缩完成.");
    	    } catch (Exception e) {
    	        e.printStackTrace();
    	    }
    	    
    	  }  
    }
    

控制层

  /**
     * 根据报名id下载资格审查条款文件zip压缩包
     * @param resp响应头
     * @param cpbrId 报名id
     * @throws Exception 
     */
    @RequestMapping(value = "downloadBidFilezip", method = RequestMethod.GET)
    public void downloadBidFilezip(HttpServletResponse resp, Long cbaId) throws Exception {
        dpPreBiderReviewBiz.downloadBidFilezip(resp, cbaId);
    }

好了 到这里就结束了 拜拜

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。   public class ZipDemo extends JFrame{   JFileChooser fileChooser; //文件选择器   JList fileList; //待压缩的文件列表   Vector files; //文件数据(待压缩文件)   JButton jbAdd; //增加文件按钮   JButton jbDelete; //删除文件按钮   JButton jbZip; //压缩按钮   JTextField target; //目标文件文本域   public ZipDemo(){   super("用ZIP压缩多个文件"); //调用父类构造函数   fileChooser=new JFileChooser(); //实例化文件选择器   files=new Vector(); //实例化文件数据Vector   fileList=new JList(files); //实例化已选择文件列表   jbAdd=new JButton("增加"); //实例化按钮组件   jbDelete=new JButton("删除");   jbZip=new JButton("压缩");   target=new JTextField(18);   JPanel panel=new JPanel(); //实例化面板,用于容纳按钮   panel.add(jbAdd); //增加组件到面板上   panel.add(jbDelete);   panel.add(jbZip);   JPanel panel2=new JPanel();   panel2.add(new JLabel("目标文件"));   panel2.add(target);   JScrollPane jsp=new JScrollPane(fileList);   Container container=getContentPane(); //得到容器   container.add(panel2,BorderLayout.NORTH); //增加组件到容器   container.add(jsp,BorderLayout.CENTER);   container.add(panel,BorderLayout.SOUTH);   jsp.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); //设置边界
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值