SuperAPI AI 工具集

cc-streaming-export-safety

数据与分析

查看项目

更新于 10-15 21:11

技能介绍

用途:在实现用户驱动的大文件导出或批量序列化(Excel/CSV/JSON/JSONL/PDF)时提供内存安全与工程规范。触发条件为数据量未知或超过 1 万行/10 MB;固定小文件下载、静态资源下载、普通 Writer/Report 类不触发。

主要能力:

  1. 流式导出选型。≤1 万行/≤5 MB 可内存构建;1 万~10 万行强烈建议流式;>10 万行/>50 MB 必须流式加异步;数据量未知必须流式加上限保护。
  2. Excel 流式。Java 用 Apache POI SXSSF(windowSize、setCompressTempFiles(true)、finally 中 dispose());EasyExcel 用 ExcelWriter 分批写;Python 用 openpyxl.Workbook(write_only=True);Go 用 excelize 的 NewStreamWriter 并调用 Flush();Node.js 用 ExcelJS.stream.xlsx.WorkbookWriter 并逐行 commit。
  3. CSV 流式。Java 用 BufferedReader 逐行读、OpenCSV CSVWriter 逐行写;Python 用 csv.writer/reader 或 pandas.read_csv(chunksize=N);Go 用 csv.NewWriter 并调用 w.Flush();Node.js 用 csv-stringify/csv-parse stream。
  4. JSON 流式。Jackson 用 JsonGenerator 分页写数组;极大数据推荐 JSONL;Python 用 orjson 单条 dumps;Go 用 json.NewEncoder(w).Encode;Node.js 用 JSONStream.stringify()。
  5. PDF。需压测确认库是否真实增量写出,写到文件流不等于内存恒定;可拆多个 PDF 或走异步加文件存储。
  6. 公式注入防护。对用户可控且以 =、+、-、@ 开头的文本单元格做前缀转义,仅处理文本字段,在 DTO/cell writer 层集中处理。
  7. 异步化。同步导出超过 30s 易被网关 504 切断,应改为提交任务返回任务 ID,异步执行并上传对象存储,再通过轮询或通知查询。

限制与注意:SXSSF 不能随机访问已 flush 的行、不支持公式自动计算、不支持 cloneSheet;临时文件默认在 java.io.tmpdir,需注意容器磁盘配额并确保 dispose()。EasyExcel 已进入维护模式,新项目优先评估 Apache POI SXSSF、FastExcel/Apache Fesod 或已有导出栈。Go 的 csv.Writer 不自动 flush。需设置数据量上限,防止用户传入过大 pageSize。

适用场景:用户驱动的全量导出、报表下载、备份导出、批量序列化。相关技能包括异步任务模式、查询性能安全、字段映射安全。