java 打包边下载_JAVA实现边下载边压缩

@ResponseBodypublic voiddownloadUrl(HttpServletResponse response, HttpServletRequest request){

String sourceFilePath=properties.getString("sourceFilePath");//要下载的文件路径

eavlProName = xxx;//项目名

String downloadName = "xxx.zip"; //下载文件名

String agent = request.getHeader("USER-AGENT"); //浏览器内核信息

try{if (agent.contains("MSIE")||agent.contains("Trident")) {//IE

downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");

}else{

downloadName= new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");

}

}catch(Exception e) {

e.printStackTrace();

}

zip(sourceFilePath, eavlProName, response, downloadName);

response.getOutputStream().close();//这个应该没什么用

}private voidzip(String souceFileName, String eavlProName, HttpServletResponse response, String downloadName) {

File file= newFile(souceFileName);try{

zip(file, eavlProName, response, downloadName);

}catch(IOException e) {

e.printStackTrace();

}

}private void zip(File souceFile, String eavlProName, HttpServletResponse response, String downloadName) throwsIOException {

ZipOutputStream out= null;//设置压缩流。

response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");try{

out= new ZipOutputStream(newBufferedOutputStream(response.getOutputStream()));

out.setMethod(ZipOutputStream.DEFLATED);//设置压缩方法

} catch(Exception e) {

e.printStackTrace();

}

out.setEncoding("gbk");

zip(souceFile, out, eavlProName, eavlProName,null);

out.closeEntry();

out.close();

}private voidzip(File souceFile, ZipOutputStream out, String base, String eavlProName, Integer i)throwsIOException {if(souceFile.isDirectory()) {

File[] files=souceFile.listFiles();if (files.length != 0) {if (i == null || i != 1) { //对于地方目录先不创建,当地方目录下存在项目的截图时,才创建

out.putNextEntry(new ZipEntry(base + "/"));

base= base.length() == 0 ? "" : base + "/";

}if (i == null) {

i= 0;

}

i++;for(File file : files) {if (i == null || i != 2) { //2地方下面的项目名.这种不创建目录

zip(file, out, base +file.getName(), eavlProName, i);

}else{

String picPathname=file.getName();if (picPathname.equals(eavlProName)) { //取对应项目下的文件

zip(file, out, base, eavlProName, i);

}

}

}

}

}else{if (base.length() > 0) {

out.putNextEntry(newZipEntry(base));

}else{

out.putNextEntry(newZipEntry(souceFile.getName()));

}

FileInputStream in= newFileInputStream(souceFile);intb;byte[] by = new byte[1024];while ((b = in.read(by)) != -1) {

out.write(by,0, b);

}

in.close();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java将时间加1分钟的方法

SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date now new Date(); System.out.println("当前时间:" sdf.format(now));方法一: Date afterDate new Date(now .getTime() 60000); System.out.println…

对List集合中每个对象元素按时间顺序排序

需求&#xff1a; 需要对List中的每个student对象按照birthday顺序排序&#xff0c;时间由小到大排列。 1. 刚开始用的是冒泡排序&#xff0c;出现数据覆盖的情况 for (int i 0; i < list.size() - 1; i) {for (int j 0; j < list.size() - 1 - i; j) {long time li…

SpringBoot读取resource或template中的文件

Spring-Boot读取resource或template中的文件 1.项目场景&#xff1a; 以jar包方式部署系统&#xff0c;想读取resource或是template下面的文件时&#xff0c;报 File Not Found 我遇到的情况是&#xff0c;整个项目达成了一个包&#xff0c;在开发环境&#xff08;windows i…

java slot_LocalVariableTable之 Slot 复用

LocalVariableTable中的 Slot&#xff0c; 是存在复用现象的&#xff0c;这个我早就知道&#xff0c;但是&#xff0c;不太清楚是如何复用的。Java语言规范与JVM规范都没有对Java语言具体要如何使用JVM的局部变量slot做太多限制&#xff0c;只是规定了参数要从下标为0开始的局部…

关于使用this.getClass().getResource(“/“)获取文件时遇到的坑_ClassPathResource加载资源文件用法

最近在工作中遇到需要读取配置文件&#xff0c;然后第一想法就是将文件放到项目的resources目录下, 然后使用&#xff1a; String fileName "config/zh.md" String path this.getClass().getResource("/").getPath() fileName; System.out.println(p…

Objects.requireNonNull( )方法说明

Objects.requireNonNull( )方法在java.util.Objects中 作用就是判断一个对象是否为空 底层源码&#xff1a; /* param obj 需要检测是否为空的对象* param <T> 对象类型* return 对象不为空则返回该对象* throws 对象为空则报NullPointerException异常*/public static …

java 类的执行顺序_Java-类加载和main()方法的执行顺序?

2、类加载和main()的执行顺序&#xff1f;备注&#xff1a;执行main()方法会先加载main()方法所在的类。存在继承关系中&#xff0c;创建子类对象初始化过程为:父类静态成员和语句块子类静态成员和静态语句块父类普通成员和普通语句块父类构造函数子类普通成员和普通语句块父类…

利用Gson解析多层嵌套的JSON数据

数据实例: {"error": 0,"status": "success","results": [{"currentCity": "青岛","index"

编写一个程序实现方法的覆盖java_编写Java程序代码必须先声明一个____,然后在其中编写实现需求的业务代码。...

【多选题】下列关于多行注释的应用,正确的是( )【单选题】是在思维中把对象分解为各个部分、侧面、属性以及阶段,分别加以考察的方法。(1.0分)【判断题】多行注释“/*...*/”中不可以嵌套单行注释“//”。( )【多选题】直觉具有( )等特性。(2.0分)【多选题】马克思主义科学技术…

数据模型 同比 环比_同比和环比计算公式?

一、同比增长计算公式&#xff1a; 1、同比增长率(本期数&#xff0d;同期数)同期数100% 例子&#xff1a;比如说去年3月的产32313133353236313431303231363533e4b893e5b19e31333365666237值100万&#xff0c;本年3月的产值300万&#xff0c;同比增长率是多少&#xff1f; 本…

mysql80配置环境变量_MySQL:安装与配置

一、MySQL安装0、下载社区版安装包1、进入安装页面&#xff0c;这里不选择默认安装的所有工具&#xff0c;仅选择Server only。2、如果没有VC环境就点击execute安装&#xff0c;已安装就继续下一步。3、安装MySQL服务&#xff0c;Next。4、进入MySQL的配置环节&#xff0c;首先…

解决SVN无法add to ignore list的问题

有时候&#xff0c;在SVN中添加某文件夹到忽略列表即add to ignore list的时候报错&#xff0c;无法添加进忽略列表&#xff0c;这里总结一下&#xff0c;无非就是两个原因 仓库中已经存在了该文件夹的历史版本&#xff0c;因而无法忽略 解决方法&#xff1a;先备份该文件夹&am…

oracle正则表达式包含但不含_Oracle 正则表达式(详细)

Oracle 正则表达式正则表达式就是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板&#xff0c;将某个字符模式与所搜索的字符串进行匹配。本文详细地列出了能在正则表达式中使用…

获取某个月中的第一天和最后一天某个月的天数当月第一天,当月最后一天,当年的第一天,当年的最后一天

获取某个月中的第一天和最后一天&某个月的天数 public static void main(String args[]){int month 2;// 2月Calendar cal Calendar.getInstance();cal.set(Calendar.YEAR, 2022);cal.set(Calendar.MONTH, month - 1);int max cal.getActualMaximum(Calendar.DATE);int…

python使用loaddata_Python中LOADDATAINFILE语句导入数据(txt)进入MySQL的一些注意事项...

问题&#xff1a;ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ROW 1 at line 1")代码如下&#xff1a;# -*- coding: utf-8 -*-"&quo…

SimpleDateFormat 日期格式化,以及sdf.parse(“2022-02-30“)顺序加问题

时间日期标识符&#xff1a; yyyy&#xff1a;年 MM&#xff1a;月 dd&#xff1a;日 hh&#xff1a;1~12小时制(1-12) HH&#xff1a;24小时制(0-23) mm&#xff1a;分 ss&#xff1a;秒 S&#xff1a;毫秒 E&#xff1a;星期几 D&#xff1a;一年中的第几…

SimpleDateFormat的线程不安全问题

一、前言 日期的转换与格式化在项目中应该是比较常用的了 一个问题&#xff1a;项目中的日期转换怎么用的&#xff1f;SimpleDateFormat 用过吗&#xff1f;能说一下 SimpleDateFormat 线程安全问题吗&#xff0c;以及如何解决&#xff1f; 回答&#xff1a;平时就是在全局定…

JVM——System.gc、内存溢出、内存泄漏、STW、安全点、安全区域、强软弱虚引用

文章目录①. System.gc()的理解②. 内存溢出(out of Memory)③. 内存泄漏(Memory Leak)④. Stop The World⑤. 多线程中的并行与并发⑥. 垃圾回收的并行、串行、并发⑦. 安全点(Safepoint)⑧. 安全区域(Safe Region)⑨. 引用①. 强引用:不回收②. 软引用: 内存不足即回收③. 弱…

大专生自学java找不到工作_自学Java真的找不到好工作吗?

自学Java真的找不到好工作吗&#xff1f;只能说有点难&#xff01;虽然职友集数据显示Java开发相关的岗位日招聘量为89754条&#xff0c;全国Java开发工程师的平均薪资为13210元/月。从以上可以看出目前Java行业还远没有饱和&#xff0c;Java开发人才在就业市场也是很吃香&…

Java——ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

文章目录①. ThreadLocal简介①. ThreadLocal是什么②. api介绍③. 永远的helloword④. 通过上面代码总结②. 从阿里ThreadLocal规范开始①. 非线程安全的SimpleDateFormat②. 将SimpleDateFormat定义成局部变量(方案一)③. ThreadLocal 解决日期格式乱码问题④. 阿里规范怎么说…