当前位置: 首页 > news >正文

文件下载输出zip文件

文件下载输出成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.lryc.cn/news/269038.html

相关文章:

  • 构建高效数据流转的 ETL 系统:数据库 + Serverless 函数计算的最佳实践
  • 鸿蒙开发(二)- 鸿蒙DevEco3.X开发环境搭建
  • Openslide安装
  • 【ES】Elasticsearch常见问题与解决(持续更新)
  • 2023.12.29 Python面向对象 封装_继承_多台
  • 通过自然语言处理增强推荐系统:协同方法
  • 大创项目推荐 深度学习OCR中文识别 - opencv python
  • Python经典游戏 唤醒你童年记忆
  • 什么是骨传导耳机?骨传导能保护听力吗?
  • 使用electron属性实现保存图片并获取图片的磁盘路径
  • 进击的奶牛
  • 12月27日,每日信息差
  • 【赠书第14期】AI短视频制作一本通:文本生成视频+图片生成视频+视频生成视频
  • 简单工厂设计模式(计算器实例优化)
  • iconify图标集离线使用方案简介
  • java基础之理解多态
  • 第二证券:A股市场放量反弹 跨年行情或启动
  • web漏洞与修复
  • 基于Java+SpringBoot+vue实现图书借阅管理系统
  • xml文件学习(xml格式)可扩展标记语言(Extensible Markup Language)
  • nodejs+vue+ElementUi家政服务系统c90g5
  • 数据库(Database)基础知识
  • QT应用篇 二、QML用Image组件实现Progress Bar 的效果
  • SElinux工作原理简介并演示chcon、semanage、restorecon的使用方法
  • 表情串转换
  • 【娱乐小技巧】网页旋转90° 3步搞定
  • 移动管理系统软件哪家好?它是如何帮助企业降本增效的?
  • 电脑表格文件丢失如何找回?3个方法拯救丢失的文件!
  • VSCode 如何安装插件的历史版本
  • 关于edge浏览器以及插件推荐