首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

压缩流使用

编程知识
2024年08月27日 15:55

压缩流

场景:需要将一些数据,以及这些数据关联的附件压缩下载,数据导出为一个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();
    }


}
From:https://www.cnblogs.com/pyb999/p/18383052
本文地址: http://shuzixingkong.net/article/1492
0评论
提交 加载更多评论
其他文章 安装nvm,并通过nvm安装nodejs
转载请注明出处: 1.安装nvm 打开终端,然后运行以下命令来下载并安装nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 或者使用wget: wget -qO- https://r
安装nvm,并通过nvm安装nodejs 安装nvm,并通过nvm安装nodejs 安装nvm,并通过nvm安装nodejs
OpenVino快速落地部署教程
OpenVino快速落地部署教程 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化。本教程适用于Yolov5-7.0,直接跑Yolov5为6FPS,使用OpenVino后为30FPS,未来将会出一系列其他模型(Paddle等)的OpenVi
k8s-使用Network Policies实现网络隔离
一、需求 Kubernetes 的命名空间主要用于组织和隔离资源,但默认情况下,不同命名空间中的 Pod 之间是可以相互通信的。为了实现更严格的网络隔离,同一套k8s需要根据不同的命名空间进行网络环境隔离,例如开发(dev01)测试(test01)环境。Network Policies 是 Kube
k8s-使用Network Policies实现网络隔离 k8s-使用Network Policies实现网络隔离 k8s-使用Network Policies实现网络隔离
树莓派CM4(四):树莓派镜像替换内核
树莓派镜像替换内核 1. 为什么要替换内核 树莓派官方提供的镜像中,自带的内核版本为6.6.31 然而github上提供的内核源码为6.6.40,有些微差别 此外,后续很有可能进行内核裁剪定制,替换内核是一个无法绕开的工作 2. 获取内核源码 github地址: https://github.com
树莓派CM4(四):树莓派镜像替换内核 树莓派CM4(四):树莓派镜像替换内核 树莓派CM4(四):树莓派镜像替换内核
Modbus ASCII 获取数据
根据银河高低温试验箱协议读取数据 1.协议内容 8.1:通讯协议介绍 8.1.5 通讯设置 本通讯协议使用异步串行通讯方式,1 个起始位、8 个数据位、2 个停止 位、无奇偶校验数据通讯格式,其中数据位8 位,第1 位为最高位(MSB),第8 位为最低位(LSB)。 8.1.6 数据格式 通讯采用直
Modbus ASCII 获取数据 Modbus ASCII 获取数据
CANopen学习笔记(二)通讯对象PDO和SDO等
通讯对象 PDO 我的观点:一个 CANopen 设备可以拥有最多 512 个 RPDO 和 512 个 TPDO,总共最多 1024 个 PDO。(得到GPT4o的肯定) CiA协议栈观点:一个只有一个逻辑设备的 CANopen 设备最多有 512 个 PDO。 PDO的两种用法: TPDO:生产
CANopen学习笔记(二)通讯对象PDO和SDO等 CANopen学习笔记(二)通讯对象PDO和SDO等 CANopen学习笔记(二)通讯对象PDO和SDO等
Win11如何找回熟悉的开始菜单、任务栏和右键菜单
背景 公司政策满3年可以换新电脑,前段时间申请了下,到手后发现是Win11系统,配置翻倍,欣然接受,把一些常用的软件都安装上,但是,用了一段时间后,发现右键刷新要点击2次,开始菜单找东西也完全靠搜索,任务栏不可定义了,和以前常用的右下角日历小工具不兼容,如果要和这些用惯好多年的操作say goodb
Win11如何找回熟悉的开始菜单、任务栏和右键菜单 Win11如何找回熟悉的开始菜单、任务栏和右键菜单 Win11如何找回熟悉的开始菜单、任务栏和右键菜单
CMake构建学习笔记8-OpenSceneGraph库的构建
1. 概论 在连续构建了zlib、libpng、libjpeg、libtiff、giflib以及freetype这几个库之后,接下来我们就要来一个大的,构建OpenSceneGraph这样大型库。OpenSceneGraph(简称 OSG)是一个高性能、跨平台的三维图形应用程序框架,广泛应用于科学可