【问题标题】:Server sided file upload percentage sharing nodejs服务器端文件上传百分比共享nodejs
【发布时间】:2025-12-18 18:05:02
【问题描述】:

想象一个在线服务,它允许两个浏览器用户在他们之间共享文件,使用会话密钥字符串与 HTTP 作为中间人通过服务器进行通信,而不是 websocket。

为了更好的用户体验,最好向文件接收者用户显示当前上传的文件及其从上传者的进度。

那么我是怎么想的,我在哪里遇到了问题?

首先,当要上传文件时 - 客户端将向服务器发送文件元数据,如大小、名称等

但是,我将如何在文件接收器端创建上传进度条?我需要一个 websocket 连接并在上传者端发送进度,但这并不理想,不是吗?

我想问一下是否有可能在 Express.js 中,在文件上传的路由中捕获一个监听器,每次上传一大块数据时触发一个事件,这样我就可以更新数据库存储两端(接收者、上传者)在执行 HTTP Pull 以更新状态时需要获取的信息。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    首先,您需要捕获传入请求的进度。您可以使用formidable 和 express 来收听progress 事件。参见示例here

    您可以将文件的进度存储在数据库中,以便接收者看到当前正在上传的文件。

    注意 1:这是一个巨大的开销,每次上传都有多个数据库写入。对于单实例服务器或数据库,内存缓存更可取。

    注意 2:通过拉取,接收方仅在加载时看到文件的进度。这可以通过周期性拉动来解决,比如 1s 间隔,这似乎“足够活跃”,但这会带来更多的开销。建议使用 Websocket 进行实时进度更新。

    【讨论】: