java 实现 下载zip_Java实现先把多个文件压缩为zip文件后下载zip文件

Java实现请求后台后,多个Excel压缩成一个zip后,再下载zip,下载完删除压缩包。

1、添加依赖

commons-fileupload

commons-fileupload

1.3.2

javax.servlet

servlet-api

2.5

javax.servlet

jstl

1.2

2、DownloadZip下载servlet,servlet

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.*;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class DownloadZip extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setCharacterEncoding("UTF-8");

//获得要下载的文件名

String fileName = "用户表.xlsx";

String fileName2 = "用户表1.xlsx";

String fileSaveRootPath = "F:\\develop_java\\tomcat\\apache-tomcat-9.0.13\\webapps\\ROOT\\WEB-INF\\classes\\excel\\";

//得到要下载的文件

File file = new File(fileSaveRootPath, fileName);

File file2 = new File(fileSaveRootPath, fileName2);

System.out.println("Excel文件保存路径1:" + fileSaveRootPath + fileName);

System.out.println("Excel文件保存路径2:" + fileSaveRootPath + fileName2);

//如果文件不存在

if (!file.exists() || !file2.exists()) {

request.setAttribute("message", "您要下载的资源已被删除!!");

request.getRequestDispatcher("/message.jsp").forward(request, response);

return;

}

//先压缩

String zipName = "下载Excel.zip";

String zipPath = fileSaveRootPath + zipName;

ZipOutputStream zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipPath)));

ZipEntry zEntry = new ZipEntry(file.getName());

zipOutput.putNextEntry(zEntry);

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

byte[] buffer = new byte[1024];

int read = 0;

while((read = bis.read(buffer)) != -1){

zipOutput.write(buffer, 0, read);

}

zEntry = new ZipEntry(file2.getName());

zipOutput.putNextEntry(zEntry);

bis = new BufferedInputStream(new FileInputStream(file2));

while((read = bis.read(buffer)) != -1){

zipOutput.write(buffer, 0, read);

}

bis.close();

zipOutput.close();

//创建输出流,下载zip

try(OutputStream out = response.getOutputStream();

FileInputStream in = new FileInputStream(new File(zipPath));){

//设置响应头,控制浏览器下载该文件

response.setHeader("Content-Type","application/octet-stream");

response.setHeader("Content-Disposition",

"attachment;filename="+java.net.URLEncoder.encode(zipName, "UTF-8"));

while((read = in.read(buffer)) != -1){

out.write(buffer, 0, read);

}

System.out.println("zip下载路径:"+zipPath);

}finally {

try {

//删除压缩包

File zfile = new File(zipPath);

zfile.delete();

}catch (Exception e){

e.printStackTrace();

}

}

}

}

3、web.xml配置servlet,我这里没有使用框架

DownloadZip

com.gx.zip.DownloadZip

DownloadZip

/servlet/DownloadZip

4、downzip.jsp下载jsp

下载zip

下载

5、message.jsp没有文件提示jsp

Insert title here

${ message }

6、测试

f0407642606918dc1c9774a4db9f71f4.png

9df0aaa2742d2e7f4a7539e8e0361875.png

36d72a29fb61c9d2207b8cd028f903db.png

OK!Thank you for reading!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值