压缩流使用

news/2024/10/11 16:30:42

压缩流

场景:需要将一些数据,以及这些数据关联的附件压缩下载,数据导出为一个Excel,附件导出到一个文件夹中

这里使用easyexcel 导出excel 从华为云 obs 下载附件

并交给浏览器

image

public void downloadAllEliminate(HttpServletResponse response) throws IOException {// 响应头的设置response.reset();response.setCharacterEncoding("utf-8");response.setContentType("multipart/form-data");// 设置压缩包的名字// 解决不同浏览器压缩包名字含有中文时乱码的问题String downloadName = System.currentTimeMillis()+".zip";response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");// 数据List<CurrentTransactionsCountDetailsResult> allEliminate = baseMapper.getAllEliminate();InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("static/往来挂账-剔除.xlsx");// excel 输出流ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();ExcelWriter excelWriter = EasyExcel.write(outputStream1).withTemplate(inputStream).build();WriteSheet writeSheet = EasyExcel.writerSheet("往来挂账明细").build();FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).forceNewRow(Boolean.TRUE).build();excelWriter.fill(new FillWrapper("list", allEliminate), fillConfig, writeSheet);excelWriter.finish();//关闭流// 设置压缩流:直接写入response,实现边压缩边下载ZipOutputStream zipos = null;try {zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));zipos.setMethod(ZipOutputStream.DEFLATED); // 设置压缩方法} catch (Exception e) {e.printStackTrace();}// 将excel写入zipos.putNextEntry(new ZipEntry("往来挂账-剔除.xlsx"));byte[] buffer = outputStream1.toByteArray();zipos.write(buffer, 0, buffer.length);zipos.closeEntry();// 拿到所有文件, 并写入压缩流List<Map<String, String>> allEliminateFileName = baseMapper.getAllEliminateFileName();String filePath = "附件/";for (Map<String, String> stringStringMap : allEliminateFileName) {InputStream is = obsUtil.getInputStream(stringStringMap.get("path"), CurrentTransactionsCountController.filePath);zipos.putNextEntry(new ZipEntry(filePath + stringStringMap.get("fileName")));byte[] bufferTo = new byte[2048]; // 更大的缓冲区通常能提高效率int length;while ((length = is.read(bufferTo)) != -1) {zipos.write(bufferTo, 0, length); // 直接写入zipos}is.close();zipos.closeEntry();}// 确保所有条目都已写入,并刷新缓冲区zipos.flush();// 关闭流try {zipos.close();} catch (IOException e) {e.printStackTrace();}}

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

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

相关文章

快来领取迅雷加速器7天会员,让你的《黑神话悟空》更新速度嗖嗖嗖!⚡️

嘿,各位《黑神话悟空》的小伙伴们!😆 最近大家肯定都在Steam上体验这款国产3A大作吧?游戏的画质、玩法是不是让你眼前一亮?😍 但是!😫 大家有没有发现,游戏加载和更新时总是龟速,让人望穿秋水?原来是Steam的下载速度太慢啦!🐌 别急别急,今天就给大家安利一个…

Nginx 记录POST记录并设置日志只允许追加

之前想融入到默认配置中。但是还是有一些会出现疑问。只能以文章的形式来配置 之前想过异步的存储日志的方式。但是udp 的方式也是挺消耗性能的无果 一、Nginx 的默认日志文件如下:#设定日志格式,main是默认的格式 log_format main $remote_addr - $remote_user [$time_loca…

pygame手搓贪吃蛇

代码:#coding=utf-8import os,sys,re,time import pygame import random from win32api import GetSystemMetrics import copypygame.init() pygame.display.set_caption("贪吃蛇")percent = 0.6 screen_width = GetSystemMetrics(0) screen_height = GetSystemMetr…

AI创新,DataOps聚能 | 白鲸开源DTCC共话DataOps新篇章

近日,由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第15届中国数据库技术大会(DTCC 2024)隆重召开。大会以“自研创新 数智未来”为主题,吸引了数百位行业专家和广大数据领域从业者共聚这场年度数据库技术交流盛宴,共同探讨新时代下数据库的技术动态和应用实践。作为…

Android taskset用法详解

一、简介taskset 命令用于设置或者获取一直指定的 PID 对于 CPU 核的运行依赖关系。通过 taskset 命令可将某个进程与某个CPU核心绑定,使得其仅在与之绑定的CPU核心上运行 关于绑核的解释绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity)。设定以后,Linux调度…

Builder 模式在 Go 语言中的应用

Builder 模式在 Go 语言中的应用 江湖十年 Go编程世界2024年08月27日 07:21 浙江Builder 模式是一种创建型模式,即用来创建对象。 Builder 模式,中文翻译不太统一,有时候被翻译为建造者模式或构建者模式,有时候也被翻译为生成器模式。为了不给读者造成困扰,我还是直接叫它…

.NET Core 处理 WebAPI JSON 返回烦人的null为空

前言项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值,则代码实体类中对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前台对应字段赋值需要做null值判断,怎么才能全局把null替换为空。本文分享…

mysql磁盘碎片整理

背景 数据结转过程中经常进行 delete 操作,产生空白空间,如果进行新的插入操作,MySQL将尝试利用这些留空的区域,但仍然无法将其彻底占用,于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,久而久之就产生了碎片。 碎片治理思路 根据线上处理经验总…