You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS架构下如何下载运行时生成的超6MB大小的文件

AWS 原生动态大文件导出落地方案

核心思路是把同步阻塞的「请求-生成-直返」流程拆成异步生成、临时存储、签名下载三个独立环节,从架构上绕开API Gateway和Lambda的固有响应限制,全程不需要预存文件,所有文件都是运行时动态生成。

完整执行流程

  • 前端点击导出按钮后,调用提交导出任务的API接口,接口收到请求后先做参数校验、用户权限校验,直接返回202 Accepted状态码和本次任务的唯一ID,全程响应耗时控制在300毫秒以内,完全不会触发API Gateway超时。
  • 后端提交任务环节不用同步等待文件生成:小流量场景直接用Lambda异步调用能力,触发专门负责文件生成的Lambda;大流量场景可以先把任务消息投递到SQS队列做削峰,再由文件生成Lambda消费队列任务。
  • 负责生成文件的Lambda不受API Gateway超时限制,最长执行时长可以开到15分钟,足够覆盖2-7万条数据的Excel生成需求:
    • 从数据库拉取对应业务数据,用Apache POI的SXSSF流式API生成XLSX文件,不要用全量加载内存的XSSF模式,避免Lambda内存溢出,7万条数据用流式生成通常10秒内就能完成
    • 生成的文件流直接写入专门的S3临时存储桶,不要把整个文件缓存在Lambda内存里
    • 给临时存储桶配置生命周期规则,所有上传的文件超过1小时自动删除,不需要手动清理存储
    • 文件上传完成后,把任务状态更新到DynamoDB的任务表,标记为「导出完成」,同时记录对应S3文件的对象key
  • 前端拿到任务ID后,每隔2-3秒轮询一次任务状态查询接口,这个接口只需要查DynamoDB里的任务状态,响应速度极快。当查询到任务状态为完成时,后端生成对应S3对象的预签名下载URL返回给前端,前端直接跳转该URL即可触发文件下载。

关键配置说明

  • S3预签名URL默认设置15分钟有效期即可,不需要给存储桶开公共读权限,下载权限完全可控,不存在文件泄露风险
  • 如果不想用前端轮询,也可以在文件生成完成后,由生成Lambda通过WebSocket连接主动推送下载地址给前端,实现成本稍高,普通导出场景用轮询就足够
  • 不要尝试用ALB替换API Gateway直返文件:ALB虽然把响应payload上限提升到16MB、超时最长支持4000秒,但大文件直返会持续占用Lambda执行时长和并发额度,成本是S3下载方案的数倍,且后续文件体积再涨还是会碰到上限,不是长期可扩展的方案
  • 这套架构后续就算导出数据量涨到百万条、文件体积到几百MB也不需要重构,S3单文件最大支持5TB,完全能覆盖后续业务增长需求

内容的提问来源于stack exchange,提问作者daph111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:06:51