全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang实现文件上传进度监控_实时反馈上传状态

Go 语言需通过自定义 Reader 统计读取字节数、客户端轮询或 WebSocket 推送来实现上传进度反馈;服务端用 sync.Map 存储 uploadID 对应的已读/总量/完成状态,提供 /progress?id=xxx 查询接口。

Go 语言本身不直接提供上传进度回调机制,但可以通过包装 http.Request.Body,配合客户端分块上传(如使用 XMLHttpRequestfetchUpload.onprogress)+ 服务端流式读取 + 实时状态存储,实现文件上传进度的实时反馈。核心在于:**服务端边读边记、客户端定时轮询或用 WebSocket 主动推送**。

1. 服务端:自定义 Reader 记录已读字节数

关键是在解析 multipart 表单时,对每个文件的 io.Reader 做一层封装,实时统计已读数据量。

  • 使用 io.TeeReader 或自定义 Read 方法,在每次读取后更新共享的进度结构体(如用 sync.Map 存储以 uploadID 为 key 的进度)
  • 为每次上传分配唯一 ID(如 UUID),通过 URL 参数或表单字段传入,便于客户端查询
  • 示例片段:
func (p *ProgressReader) Read(b []byte) (n int, err error) {   n, err = p.R.Read(b)   p.mu.Lock()   p.read += int64(n)   p.mu.Unlock()   return }

2. 客户端:使用 XMLHttpRequest 或 fetch + onprogress

浏览器原生支持上传过程监听,无需额外库。

  • 设置 FormData 并添加文件和 uploadID 字段
  • XMLHttpRequest.upload.onprogress 获取当前上传进度(注意:这是客户端已发出的字节数,非服务端接收完成量;若需服务端确认进度,仍需后端配合)
  • 更可靠的做法是:上传开始后,启动定时器调用 /api/progress?upload_id=xxx 查询服务端记录的实际写入进度

3. 进度状态存储与查询接口

服务端需提供轻量、并发安全的进度暂存和读取能力。

  • 推荐使用 sync.Map 存储活跃上传任务(适合读多写少场景),key 为 uploadID,value 包含 totalSize(预估或客户端传入)、read(已接收字节数)、done(是否完成)等字段
  • 提供 GET 接口如 GET /progress?id=abc123,返回 JSON:{"uploaded": 1256432, "total": 5242880, "percent": 23.97}
  • 注意清理过期进度(例如上传超时或完成 5 分钟后自动删除)

4. 可选增强:WebSocket 主动推送进度

避免轮询开销,适合大文件或高实时性要求场景。

  • 客户端建立 WebSocket 连接并发送 uploadID
  • 服务端在 ProgressReader 更新时,通过对应 connection 推送进度消息
  • 需维护连接与 uploadID 的映射关系(可用 map[string][]*websocket.Conn + 读写锁)
  • 注意连接断开时的重连与状态同步逻辑


# js  # json  # go  # golang  # 浏览器  # 字节  # websocket  # 后端  # String  # 封装  # Error  # 结构体  # int  # 接口  # map  # 并发  # http  # 服务端  # 上传  # 客户端  # 自定义  # 已读  # 表单  # 这是  # 是在  # 推荐使用  # 可以通过 


相关文章: 制作门户网站的参考文献在哪,小说网站怎么建立?  建站之星2.7模板:企业网站建设与h5定制设计专题  网站制作知乎推荐,想做自己的网站用什么工具比较好?  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站之星如何取消后台验证码生成?  css网站制作参考文献有哪些,易聊怎么注册?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  建站主机CVM配置优化、SEO策略与性能提升指南  Python路径拼接规范_跨平台处理说明【指导】  Python lxml的etree和ElementTree有什么区别  宝塔新建站点报错如何解决?  网站代码制作软件有哪些,如何生成自己网站的代码?  专业网站建设制作报价,网页设计制作要考什么证?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何在阿里云域名上完成建站全流程?  如何快速重置建站主机并恢复默认配置?  建站之星安装需要哪些步骤及注意事项?  简历在线制作网站免费版,如何创建个人简历?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何在橙子建站上传落地页?操作指南详解  实惠建站价格推荐:2025年高性价比自助建站套餐解析  简单实现Android文件上传  建站之星安装后界面空白如何解决?  如何选择最佳自助建站系统?快速指南解析优劣  如何快速查询网站的真实建站时间?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  内部网站制作流程,如何建立公司内部网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何在云指建站中生成FTP站点?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何正确选择百度移动适配建站域名?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  ,交易猫的商品怎么发布到网站上去?  如何通过智能用户系统一键生成高效建站方案?  如何通过cPanel快速搭建网站?  如何在VPS电脑上快速搭建网站?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何正确下载安装西数主机建站助手?  如何续费美橙建站之星域名及服务?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  平台云上自主建站:模板化设计与智能工具打造高效网站  建站主机是否等同于虚拟主机?  网站制作公司广州有几家,广州尚艺美发学校网站是多少? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。