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

ESP32服务器文件上传进度异常:如何获取真实上传进度?

问题解答

问题1:浏览器端能否获取ESP FATFS中数据保存的实时进度?

不行。xhr.upload.onprogress 仅追踪浏览器到服务器TCP栈/中间网络缓存的数据传输进度,完全无法感知ESP32应用层将数据写入FATFS的过程。这是因为HTTP协议本身没有内置机制让服务器主动向浏览器推送磁盘写入的实时状态,浏览器只能获取到自身发送数据的阶段进度。

问题2:有没有更简便的方案替代SSE+额外HTTP处理器的方案?

有两种轻量化的可行思路:

方案1:修改ESP32 HTTP服务器的接收逻辑,禁用请求体缓冲

很多嵌入式HTTP服务器默认会先把整个请求体缓存到内存或临时区域,再交给应用层处理,这就导致浏览器很快把所有数据发完,onprogress直接跳100%,但服务器还在慢慢写FATFS。

你可以调整ESP32的HTTP服务器配置,改用分段接收+即时写入的方式:

  • 用httpd_req_recv()每次接收一小段数据(比如4k字节)
  • 每接收一段就立刻写入FATFS,而非等整个文件接收完成
  • 这种分段逻辑会自动触发TCP窗口调整,让浏览器不会一次性发送所有数据

调整后xhr.upload.onprogress就能真实反映数据从浏览器到ESP32磁盘的整体进度,因为浏览器会等待服务器确认接收一段后,再发送下一段。

方案2:将文件拆分为小块逐个上传

把400-500k的文件拆成多个小分片(比如每片10k),通过多次XMLHttpRequest逐个上传:

  • 每上传完成一个分片,就更新进度条的对应比例
  • 服务器端仅需接收每个分片并追加写入到同一个文件即可

这种方案不需要修改服务器的核心HTTP处理逻辑,也不需要额外的SSE或线程,仅需客户端做简单的文件拆分,服务器做分片拼接,就能实现准确的进度跟踪。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:27:08