easyexcel 支持 web 写入的 stream chunked response

uurity8g  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(45)

建议先去看文档

快速开始常见问题

建议描述

建议支持 stream chunked response
原因:
对于大文件的导出(100M以上),实际上是 finish() 时才把所有数据统一转成流输出,这导致两个问题:

  1. 查询并处理数据需要花费时间,即使分页查询,等所有全部页查询并处理后,累计的时间也非常大,很容易导致网关 504
  2. 所有数据堆积内存最后才统一输出,可能导致内存不足或者 OOM

具体建议:
在 ExcelWriter 中可以增加一个 useStreamChunkedResponse 的参数开关来控制是否开启 stream chunked response ,默认为 false,开启后,每次 write 时,即时把数据转成输出,是否压缩看是否可以支持。finish() 做兼容处理.

mzillmmw

mzillmmw1#

import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;

import java.io.OutputStream;
import java.util.List;

public class ExcelExportService {

    public void exportData(List<MyData> dataList, OutputStream outputStream, boolean useStreamChunkedResponse) {
        // 创建ExcelWriter
        ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX, useStreamChunkedResponse);

        // 定义Sheet
        Sheet sheet = new Sheet(1, 0, MyData.class);

        // 写入数据
        excelWriter.write(dataList, sheet);

        // 结束写入
        excelWriter.finish();
    }
}

相关问题