Java HttpServletResponse 多文件下载
测试 Java HttpServletResponse 多文件下载(ZIP压缩)
- 1 项目结构
- 2 Tomcat 配置
- 3 测试代码
- 3.1 FileDownloadServlet
- 3.2 FileUtils
- 4 测试结果
1 项目结构
2 Tomcat 配置
在response.getOutputStream()实现文件下载,如果是多个文件可以把压缩为一个zip文件
Eclipse 中 Dynamic Web Project 已经不怎么使用,请使用 SpringBoot
3 测试代码
3.1 FileDownloadServlet
package com.xu.utils;import java.io.IOException;
import java.util.Properties;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;/*** Servlet implementation class FileDownloadServlet*/
@WebServlet(name="download",urlPatterns = {"/FileDownloadServlet", "/download"})
public class FileDownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public FileDownloadServlet() {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 stubdoPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(System.getProperties().getProperty("java.version"));System.out.println(System.getProperty("java.vm.specification.version"));System.out.println(System.getProperty("java.vm.specification.vendor"));System.out.println(System.getProperty("java.vm.specification.name"));System.out.println(System.getProperty("java.vm.version"));System.out.println(System.getProperty("java.vm.vendor"));System.out.println(System.getProperty("java.vm.name"));if (request.getParameter("op").equalsIgnoreCase("download")) {FileUtils file=new FileUtils();String[] files= {"E:/1.txt","E:/3.txt","E:/2.txt"};try {file.multFileDownload(response, files, "a.zip");} catch (Exception e) {e.printStackTrace();}}}}
3.2 FileUtils
package com.xu.utils;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;public class FileUtils {/*** 1 多文件下载** @param response HttpServletResponse* @param files[] 待下载文件* @param downloadfile 下载文件文件名+文件类型(a.zip)* @throws Exception* @date 2019年3月29日11:31:35*/public void multFileDownload(HttpServletResponse response, String[] files, String downloadfile) throws Exception {response.setContentType("multipart/form-data");//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setHeader("Content-Disposition", "attachment;fileName=" + downloadfile);FileInputStream instream = null;try {ZipOutputStream zipstream = new ZipOutputStream(response.getOutputStream());for (String file : files) {if (!new File(file).exists()) {continue;}instream = new FileInputStream(file);ZipEntry entry = new ZipEntry(file);zipstream.putNextEntry(entry);byte[] buffer = new byte[1024];int len = 0;while ((len = instream.read(buffer)) != -1) {zipstream.write(buffer, 0, len);}instream.close();zipstream.closeEntry();zipstream.flush();}zipstream.finish();zipstream.close();} catch (IOException e) {new RuntimeException(e.getMessage());}}/*** 2 多文件下载** @param response HttpServletResponse* @param files[] 待下载文件* @param downloadfile 下载文件* @param path 待下载文件路径* @param tempfile 待下载临时文件* @throws Exception* @date 2019年3月29日11:31:35*/public void multFileDownload(HttpServletResponse response, String[] files, String path, String downloadfile) throws Exception {response.setContentType("multipart/form-data");//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setHeader("Content-Disposition", "attachment;fileName=" + downloadfile);FileInputStream instream = null;try {ZipOutputStream zipstream = new ZipOutputStream(response.getOutputStream());for (String file : files) {if (!new File(path + file).exists()) {continue;}instream = new FileInputStream(path + file);ZipEntry entry = new ZipEntry(path + file);zipstream.putNextEntry(entry);byte[] buffer = new byte[1024];int len = 0;while ((len = instream.read(buffer)) != -1) {zipstream.write(buffer, 0, len);}instream.close();zipstream.closeEntry();zipstream.flush();}zipstream.finish();zipstream.close();} catch (IOException e) {new RuntimeException(e.getMessage());}}/*** 1 单文件下载** @param response HttpServletResponse* @param filepath 待下载文件路径* @param downloadfile 下载文件* @date 2019年3月29日11:31:35*/public void singleFileDownload(HttpServletResponse response, String filepath, String downloadfile) {response.setContentType("multipart/form-data");//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setHeader("Content-Disposition", "attachment;fileName=" + downloadfile);ServletOutputStream out;File file = new File(filepath);if (!file.exists()) {new RuntimeException("文件不存在");}try {FileInputStream inputStream = new FileInputStream(file);out = response.getOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inputStream.read(buffer)) != -1) {out.write(buffer, 0, len);}inputStream.close();out.flush();out.close();} catch (IOException e) {new RuntimeException(e.getMessage());}}/*** 2 单文件下载** @param response HttpServletResponse* @param filepath 待下载文件路径* @param filename 下载文件名称* @param filetype 下载文件类型* @date 2019年3月29日11:31:35*/public void singleFileDownload(HttpServletResponse response, String filepath, String filename, String filetype) {response.setContentType("multipart/form-data");//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setHeader("Content-Disposition", "attachment;fileName=" + filename + filetype);ServletOutputStream out;File file = new File(filepath);if (!file.exists()) {new RuntimeException("文件不存在");}try {FileInputStream inputStream = new FileInputStream(file);out = response.getOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inputStream.read(buffer)) != -1) {out.write(buffer, 0, len);}inputStream.close();out.flush();out.close();} catch (IOException e) {new RuntimeException(e.getMessage());}}/*** 1 多文件 压缩成 ZIP** @param files 文件名字* @param path 文件路径* @param loaclfilepath 临时文件全路径* @date 2019年3月29日11:31:35*/public void toZip(String[] files, String path, String loaclfilepath) throws Exception {FileInputStream instream = null;ZipOutputStream zipstream = new ZipOutputStream(new FileOutputStream(new File(loaclfilepath)));for (String file : files) {if (!new File(path + file).exists()) {continue;}instream = new FileInputStream(path + file);ZipEntry entry = new ZipEntry(path + file);zipstream.putNextEntry(entry);byte[] buffer = new byte[1024];while ((instream.read(buffer)) != -1) {zipstream.write(buffer, 0, buffer.length);}zipstream.closeEntry();zipstream.flush();}zipstream.finish();zipstream.close();}/*** 2 多文件 压缩成 ZIP** @param files 文件名字* @param path 文件路径* @param loaclfilepath 压缩文件全路径* @date 2019年3月29日11:31:35*/public void toZip(List<String> files, String path, String loaclfilepath) throws Exception {FileInputStream instream = null;ZipOutputStream zipstream = new ZipOutputStream(new FileOutputStream(new File(loaclfilepath)));for (String file : files) {if (!new File(path + file).exists()) {continue;}instream = new FileInputStream(path + file);ZipEntry entry = new ZipEntry(path + file);zipstream.putNextEntry(entry);byte[] buffer = new byte[1024];while ((instream.read(buffer)) != -1) {zipstream.write(buffer, 0, buffer.length);}zipstream.closeEntry();zipstream.flush();}zipstream.finish();zipstream.close();}}
4 测试结果
18
18
Oracle Corporation
Java Virtual Machine Specification
18+36-2087
Oracle Corporation
OpenJDK 64-Bit Server VM
测试项目文件
http://localhost:9090/DynamicWebProject/download?op=download
Java HttpServletResponse 多文件下载相关推荐
- Java 之 Excel文件下载
Java 之 Excel文件下载 可以直接当作工具类使用 Controller业务层使用 做为Utils工具类使用 实例截图 图片三联 可以直接当作工具类使用 老规矩,废话不多说直接上代码: Cont ...
- java实现远程文件下载
转自JAVA 实现远程文件下载 相信很多同学在实际的项目开发中都会遇到一个问题,如何跨服务下载文件?在传统SSH, SSH2, SSM架构中可能很少遇到这样的问题,但是在当前逐渐流行的微服务架构中,这 ...
- java 下载加速_一种基于Java的大文件下载加速方法与流程
本发明涉及java/多线程技术领域,涉及一种加速文件下载装置,具体提供一种基于java的大文件下载加速方法. 背景技术: 现有的常用下载方式是基于浏览器的单线程下载.这种单线程下载的方式,是通过htt ...
- Java实现网络文件下载demo
Java实现网络文件下载demo import java.io.*; import java.net.HttpURLConnection; import java.net.URL;/*** @auth ...
- java实现高效文件下载
java实现高效文件下载 本文我们介绍几种方法下载文件.从基本JAVA IO 到 NIO包,也介绍第三方库的一些方法,如Async Http Client 和 Apache Commons IO. 最 ...
- Java多格式文件下载及解压处理
工作中遇到很多多格式文件下载压缩及解压处理,现将通用文件下载工具类做一个总结.包含格式(doc/docx.xls/xlsx.lrm/lrmx.txt.zip/rar等). 一.解压处理 文件解压主要处 ...
- java webapp下文件下载,JavaWeb文件下载
java 文件下载 在此之前需要先简绍一下常见的MIME类型,以供之后使使用: 内容类型 文件扩展名 描述 application/msword doc Microsoft Word applicat ...
- 如何用Java实现浏览器文件下载功能
一.了解ServletContext对象 代表整个web应用,可以和程序的容器(服务器)来通信. 1. 概念 ServletContext是Servlet中最大的一个接口,呈现了web应用的Servl ...
- Java中实现文件下载通用方式
文件下载只需要四步: 1.设置文件ContentType类型 response.setContentType("multipart/form-data"); 2.设置文件头 res ...
最新文章
- 浅谈Delphi过程与函数02 - 零基础入门学习Delphi21
- 201621123037 《Java程序设计》第10周学习总结
- 以云战“疫”,这次阿里云又让人们惊了……
- python打log_python根据文件大小打log日志
- linux的idle命令,DBA 常用Linux命令
- Odoo 14 版本优化更新的新功能体验
- TypeError: 'list' object is not callable
- Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)
- Solaris 设备状态检查常用命令
- Centos7.5软硬件、IP地址及主机名称配置详细教程
- 写点感想2:车载毫米波雷达产品研发架构
- python中len的用法_Python len函数用法
- ubuntu 22.04 网易云
- 那些入行的Python工程师们还好吗?
- 【转贴】龙芯生态产品和解决方案巡展(第二篇)——笔记本电脑
- Xplorasia(畅怀旅游)选择云呐资产管理为企业降本增效
- 你真的了解Linux(Deepin)的软件商店吗?(内附极力推荐的软件)
- 使用Matlab/Simulink进行电力电子控制设计
- OCJP 考试题之八
- 网易我的世界服务器清除TNT,以及圈地领地,命令方块使用