java中批量导出文件并压缩到zip文件中

news/2024/7/21 3:52:25 标签: java, excel

最近开发遇到个问题 批量导出并压缩到zip文件中,代码和思路如下 不做赘余的解释…

@PostMapping("/downLoads")
	public void downLoadCategoryFiles(@RequestBody List<String> fileUids, HttpServletResponse response) throws Exception {
		// 取得文件信息
		List<xxx> file = this.service.listByIds(fileUids);
		if (file.size() == 0) {
			throw new CheckedException("文件信息丢失");
		}
		
		this.service.getCategoryFiles(fileUids, response);
	}

service层代码

void getCategoryFiles(List<String> fileUid, HttpServletResponse response) throws Exception;

实现层业务代码如下:

@Override
	public void getCategoryFiles(List<String> fileUids, HttpServletResponse response) throws Exception {
		List<实体类> files = this.listByIds(fileUids);
		if (files.size() == 0) {
			throw new RuntimeException("文件已被删除。");
		}
		
		//将路径放到一个list中去
		List<String> fullPaths = files.stream().map(实体类::getFullPath).collect(Collectors.toList());
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String year = sdf.format(new Date());//获取当前年月日
		
		//设置文件/名称
		response.addHeader("Content-Type", "application/zip");
        response.addHeader("Content-Disposition", "attachment; filename=\"" + year + ".zip\"");

        //逻辑处理
        try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream()); ) {
            for (String fileName : fullPaths) { //循环往zip中放入文件
                File file = new File(fileName);
                FileInputStream fileIn = new FileInputStream(file);
                ZipEntry zipEntry = new ZipEntry(file.getName());
                zipOut.putNextEntry(zipEntry);
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fileIn.read(buffer)) > 0) {
                    zipOut.write(buffer, 0, len);
                }
                fileIn.close();
                zipOut.closeEntry();
            }
            zipOut.finish();
        } catch (Exception e) {
        	throw new RuntimeException("文件批量下载有误.", e);
        }
	} 

最后一层 代码中所提到的"实体类",自我填充即可.


http://www.niftyadmin.cn/n/5027335.html

相关文章

【自动驾驶】PETR 环境安装与测试

1.环境安装 该工程依赖MMCV&#xff0c; MMDetection&#xff0c; MMDetection3d&#xff0c;MMSegmentation Install MMCV pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.htmlexamples&#xff1a; pip install…

数据库被攻击需要注意什么

没想到自己用了一个简单的腾讯虚拟机&#xff0c;里面自己安装了一个 MySQL 数据库也会被黑客攻击。 一、问题现象 小程序访问不了&#xff0c;后台程序报数据库相关的错误。 查看数据库&#xff0c;发现数据库被篡改。 二、问题原因 1、为了可以远程能够访问数据库&#xf…

【MySQL数据库原理】MySQL Community 8.0界面工具汉化

尝试以下方法来汉化 MySQL Workbench 8.0 的菜单&#xff1a; 1、使用社区翻译版本&#xff1a;有一些热心的社区成员会将 MySQL Workbench 翻译成不同的语言&#xff0c;包括中文。你可以在一些开源或社区网站上寻找这些翻译版本&#xff0c;并按照他们的说明进行安装。 2、…

为什么百度百科有词条,而维基百科无法创建?

很多企业有出口业务&#xff0c;想在互联网上开展全球性网络营销&#xff0c;维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科&#xff0c;经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容&#xff0c;可事实上两个平台的…

组件自定义事件学习笔记

组件自定义事件_绑定 JS中有内置事件比如click&#xff0c;keyup。内置事件是给标签使用的&#xff0c;而自定义事件是给组件使用的。 子组件给父组件传递数据有两种方式 App父组件&#xff0c;School和Student是子组件。 子组件给父组件传递函数类型的props实现&#xff…

学生在线查询系统

在教育管理中&#xff0c;学生查询系统是一个必不可少的工具&#xff0c;它能够方便学生、家长和教师快速获取学生的各项信息。而易查分作为一个功能强大的在线查询工具&#xff0c;能够帮助教育机构快速搭建一个高效便捷的学生查询系统。通过注册易查分账号&#xff0c;创建查…

go 包的引入

本文介绍下下go包的管理&#xff0c;以linux平台为例。 先看下目录结构&#xff1a; test目录下的test.go test2目录下的test.go 主函数的调用 此时执行会报错&#xff0c;需要用mod进行包的管理,执行下面命令 go mod init godir 生成go.mod文件 执行结果&#xff1a;

23062QTday1

自己制作一个登录界面 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QApplication>#include <QLineEdit> #include <QLabel> #include <QMovie> class Widget : public QWidget {Q_OBJECTpublic:Widget(…