文件下载输出zip文件

news2024/11/27 13:44:46

文件下载输出成zip文件:

1、前端整个按钮,调js方法:(参数:param,需要下载的id,用逗号拼接)

var param = "?dto.id=";//需要自己拼接param
window.location.href = "<%=basePath%>app/upload/fileAction!uploadFileToZip.do" + param;

2、java关键依赖

 <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.9.6</version>
 </dependency>

3、后端代码:

import org.apache.tools.zip.ZipEntry; //zip的关键包
import org.apache.tools.zip.ZipOutputStream;//zip的关键包

@Controller
@RequestMapping("/app/upload")
public class FileAction {

//下载zip文件
 @RequestMapping("fileAction!uploadFileToZip.do")
    public void uploadFileToZip() {
        ParamDTO dto = getDto();//页面参数,可以用自己的方法
        try {
            String[] param = dto.getAsString("id").split(",");//参数
            Map<String, String> m = new HashMap<String, String>();
            String zipName = getNowDate()+ ".zip";//zip名称,我用的是当前日期
            //下载压缩文件代码
            getResponse().reset();
            getResponse().setContentType("application/x-download");
            getResponse().setHeader("Content-Disposition", "attachment;fileName=" + new String(zipName.getBytes("GB2312"), "iso8859-1"));
            ZipOutputStream zipout = new ZipOutputStream(getResponse().getOutputStream());
            UserAccountInfo userAccountInfo = getUserAccountInfo(dto.getUserInfo());// // 获取用户信息,自己定义
            InputStream input = null;
            for (String s : param) {
                m.put("yvk010", s);
                List<Map> fjList = getDao().queryForList("vk01shenhe.queryApplyList_publish_fjxz", m);//查询需要下载的附件list,自己根据需求查询
                if (!ValidateUtil.isEmpty(fjList)) {
                    Object yuf054 = fjList.get(0).get("yuf054");
                    if (!ValidateUtil.isEmpty(yuf054)) {
                        String filename = "未命名";
                        //读文件
                        //input = new ByteArrayInputStream(domains.get(0).getOrig_file());
                        input = UcmUtil.getFile(yuf054.toString(), userAccountInfo);//去文件服务器读取文件流,自己定义
                        byte[] buffer = new byte[input.available()];
                        int len = input.read(buffer);
                        if (len < 0) {
                        }
                        filename = (String) fjList.get(0).get("yuf052");
                        zipout.putNextEntry(new ZipEntry(filename));
                        //设置压缩文件内的字符编码,不然会变成乱码
                        zipout.setEncoding("GBK");
                        zipout.write(buffer);
                    }
                }
            }
            if (input != null) {
                input.close();
            }
            if (zipout != null) {
                zipout.closeEntry();
                zipout.close();
            }
        } catch (Exception e) {

        }
    }

  //生成当前日期方法
  public String getNowDate(){
        LocalDate today = LocalDate.now(); // 获取当前日期
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 定义日期格式
        String formattedDate = today.format(formatter); // 格式化日期
        System.out.println(formattedDate); // 输出格式化后的日期
        return formattedDate;
    }
}

4、效果图:

请添加图片描述

查询数据库,循环查询去服务器查询文件流,这里就不写了,每个公司情况不一样,自己套公式!
如果文件过多,可以自己分批下载,看情况舔砖就行!

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

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

相关文章

C++ 函数模板 template

现在的C编译器实现了C新增的一项特性一一函数模板. 函数模板是通用的函数描述&#xff0c;也就是说它们使用泛型来定义函数&#xff0c;其中的泛型可用具体的类型(如int或double)替换。 通过将类型作为参数传递给模板&#xff0c;可使编译器生成该类型的函数。由于模板允许以泛…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案

2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 作品名&#xff1a;基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案 队伍名&#xff1a;Absofastlutely 蒋松儒 计算机科学与技术系 硕士 南京大学 中国-江苏 kahsoltqq.com 吕欢欢 计算…

Windows搭建RTMP视频流服务(Nginx服务器版)

文章目录 引言1、安装FFmpeg2、安装Nginx服务器3、实现本地视频推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP / RTMP系列文章 引言 RTSP和RTMP视频流的区别 RTSP &#xff08;Real-Time Streaming Protocol&#xff09;实时流媒体协议。 RTSP定义流格式&#xff…

26K star! 跨平台的开源AirDrop 替品

现在大家的设备都很多&#xff0c;平时在家里手机&#xff0c;电脑&#xff0c;平板之间怎么传文件&#xff1f;如果你是苹果党&#xff0c;那肯定AirDrop最方便。但是当你需要跨平台来传输内容时&#xff0c;怎么样能更方便呢&#xff1f;各种网盘们都需要网络&#xff0c;如果…

MySQL 数据库系列课程 03:MySQL数据库相关软件的下载和安装

俗话说&#xff1a;“工欲善其事&#xff0c;必先利其器”&#xff0c;开始学习 MySQL 之前我们一定是要做环境准备的&#xff0c;接下来我们来讲解一下 MySQL 的安装。 一、MySQL下载 步骤一&#xff1a;官方入口的寻找 &#xff08;1&#xff09;大家可以尝试在官网寻找 M…

java基础-回忆性记录

java基础 Java概括 jaava是一种计算机交流的高级编程语言&#xff0c;1995年java衍生&#xff0c;詹姆斯高斯林被世人称之为java之父。 java语言具有跨平台性 java程序并非可以直接运行的&#xff0c;在java程序编译完成后会形成与编译无关的class文件。Java具有跨平台性&a…

【前端学习指南】第一站 Vue 生命周期初探

&#x1f36d; Hello&#xff0c;我是爱吃糖的范同学 &#x1f534; 想把自己学习技术的经历和一些总结分享给大家&#xff01; &#x1f534; 通过这样的方式记录自己成长&#xff0c;同时沉淀自己的技术&#xff0c;我会把所有额外的时间和经历投放到CSDN和公众号&#xff0…

Flink1.17实战教程(第四篇:处理函数)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

DDR终端匹配电阻的长度多少合适?

上次我们对不加端接电阻和加端接电阻之后的仿真结果做了分析之后我们得出在DDR采用菊花链拓扑结构的时候是需要加端接电阻的&#xff0c;这次我们看看DDR末端的端接电阻距离最后一片DDR远一点效果好一些还是近一点效果好一些。 本次采用的案例依旧是我们上期的DDR3一拖八正反贴…

Kali Linux中的十大WiFi攻击工具介绍

在这十大WiFi攻击黑客工具中&#xff0c;我们将讨论一个非常受欢迎的主题&#xff1a;无线网络攻击以及如何防止黑客入侵。无线网络通常是网络的一个弱点&#xff0c;因为WiFi信号可以随处可见&#xff0c;任何人都可以使用。还有很多路由器包含漏洞&#xff0c;可以利用正确的…

【Web API系列】使用getDisplayMedia来实现录屏功能

文章目录 前言一、认识getD该处使用的url网络请求的数据。二、使用步骤1.使用方法一实现录屏2.使用方法二实现录屏3. 运行效果 延伸 前言 Web API经过长期的发展&#xff0c;尤其是最近&#xff0c;发展相当迅猛&#xff0c;现在已经支持很多功能了&#xff0c;一些原生就支持…

使用vivado使用的方法以及遇到的错误

文章目录 前言一、Vivado运行RTL分析闪退二、在创建完工程后修改开发板型号三、引脚分配时&#xff0c;没有对应引脚或是I/O Std四、创建bit流文件五、安装Modelsim的流程&#xff08;有一步很重要&#xff09;六、和谐Modelsim七、vivado联合Modelsim进行仿真 前言 学习vivad…

Linux性能优化全景指南

Part1 Linux性能优化 1、性能优化性能指标 高并发和响应快对应着性能优化的两个核心指标&#xff1a;吞吐和延时 应用负载角度&#xff1a;直接影响了产品终端的用户体验系统资源角度&#xff1a;资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈&#xff0c;但…

【模拟电路】基础电路

一、模拟电路概述 二、计算机工作原理 三、电流 四、直流电&#xff08;DC&#xff09;和交流电&#xff08;AC&#xff09; 五、开路和闭路 六、电压 七、电阻和欧姆定律 八、串联电路和并联电路 模拟电路基础PPT 一、模拟电路概述 模拟电路是一种使用电子元件&#xff08;如…

如何解决mac无法访问github

确定github能访问的ip地址 点击检测按钮&#xff0c;找到比较快的ip 修改hosts文件&#xff1a;打开终端&#xff0c;输入 open /etc/hosts 后回车&#xff0c;打开mac的文本编辑器 add github.com 140.82.121.4 github.com 199.232.69.194 github.global.ssl.fastly.net …

【GoLang】Go语言几种标准库介绍(二)

你见过哪些令你膛目结舌的代码技巧&#xff1f; 文章目录 你见过哪些令你膛目结舌的代码技巧&#xff1f;前言几种库container 库 (封装堆、列表和环形列表等容器)主要功能&#xff1a;示例 crypto (加密算法)主要的子包和功能&#xff1a;示例 database(数据库驱动和接口)主要…

椭圆中点算法

原理 椭圆的扫描转换与圆的扫描转换有相似之处&#xff0c;但也有不同&#xff0c;主要区别是椭圆弧上存在改变主位移方向的临界点。瞬时针绘制四分椭圆弧的中点算法&#xff0c;根据对称性可以绘制完整的椭圆。 四分椭圆弧 中心在原点&#xff0c;长半轴为 a a a、短半轴为…

python flask学生成绩管理系统,包含使用文档

python flask学生成绩管理系统。 一.功能介绍 系统交互 登录无需注册功能 学生以学生编号为用户名&#xff0c;密码默认为学生编号&#xff0c;可修改教师以教师编号为用户名&#xff0c;密码默认为教师编号&#xff0c;可修改管理员以admin作为用户名&#xff0c;密码为固定…

关于Unity使用图片字体示例

1.使用TexturePacker打包图集 下载地址 TexturePacker - Create Sprite Sheets for your game! 2.准备好数字图 3. 导入图片 4. 打包图集需要的设置 将重心点设置为左下方 点击回车 > 后点击回 >到精灵列表 选择导出的格式 导出后的内容 >导入unity 导入 >…

AI产品经理 - 方法篇-工作方法

一、AI产品经理-典型的工作方法 二、如何从0做一个AI产品 1. 完整的工作流程 2.项目经理&#xff1a; 3.项目实施&#xff1a;样本测试模型-推荐引擎 4.项目上线 5. 项目实施-产品设计研发