有哪些库支持用标准流API从浏览器向Node.js服务端传输流数据?
适配Angular+低内存嵌入式Node.js的流式文件传输方案
方案1:@stardazed/streams + ws 组合(兼容性最优)
该方案完全符合Web Streams API和Node.js Stream标准,适配成本极低,不需要复杂的Angular配置:
- 浏览器端:仅需安装
@stardazed/streams和ws两个npm包,无需引入browserify全套依赖,也不需要额外修改Angular构建配置,可直接实现你需要的极简调用逻辑:
source_file.stream().pipeTo(wsWritable);
- Node.js端:原生
ws库返回的连接对象本身就是标准Node.js Readable流,直接调用即可:
socket.pipe(destination_file);
- 该方案传输时仅缓存单个分片数据,内存占用在KB级别,完全适配嵌入式设备的低内存限制。对于不支持原生Web Streams API的旧版浏览器,搭配
web-streams-polyfill即可覆盖95%以上的主流浏览器版本。
方案2:原生Fetch流式上传(轻量化最优)
你之前关注的Fetch请求流目前已经在Chrome、Edge等主流Chromium内核浏览器的正式版中支持,无需开启实验特性,如果你面向的用户使用2023年之后更新的浏览器,完全可以直接使用:
- 浏览器端调用示例:
await fetch('/upload', { method: 'POST', body: source_file.stream(), duplex: 'half' });
- Node.js端无需引入任何第三方依赖,原生http模块的请求对象本身就是Readable流,直接
req.pipe(destination_file)即可,是目前最轻量化的方案,基于HTTP/1.1的分块传输编码实现,没有额外协议开销。
方案3:binary.js 流传输库(功能最全)
如果你需要额外的传输控制能力(比如断点续传、进度回调、错误重传),可以选择binary.js,它已经内置了Web Streams和Node.js Stream的双向适配:
- 浏览器端无需复杂配置,直接安装npm包即可调用,写法符合标准流API规范。
- Node.js端收到的流直接是标准Node.js Readable实例,可直接pipe到文件流。
已有方案补充说明
你之前否定的部分方案其实可以通过扩展实现需求:
- socket.io 核心库本身不支持流,但可以搭配
socket.io-stream扩展包实现标准流的双向传输,如果你现有项目已经在使用socket.io做通信,可以直接扩展无需更换底层协议。 - Axios 目前的beta版本已经支持请求流传入,如果你愿意使用beta版,可以直接传入ReadableStream作为请求体,无需额外适配。
内容的提问来源于stack exchange,提问作者Chris Malek
相关产品推荐
相关产品推荐

