Streams API 与分块上传及断点续传实践概述Streams API 支持在浏览器端以流方式读写数据;结合 `fetch` 的请求流可实现分块上传与断点续传,并在弱网场景下保持稳定的传输体验。技术背景响应流:`response.body` 为 `ReadableStream`;请求流:以 `ReadableStream` 作为 `fetch` body,需设置 `{ duplex: 'half' }`;Firefox 仍在推进实现。核心内容请求流示例const stream = new ReadableStream({ start(controller) { controller.enqueue(new Uint8Array([1,2,3])); controller.close(); } }); await fetch('/upload', { method: 'POST', body: stream, duplex: 'half' }); 断点续传策略服务器记录已接收偏移;客户端按块重传未完成部分。结合 Service Worker 与缓存避免重复读取。技术参数与验证测试环境浏览器:Chrome/Edge 120+(请求流支持);Firefox(跟踪进展);Safari 17+验证要点弱网下的分块大小、重试策略与背压控制;端到端吞吐与失败恢复时间。应用场景大文件上传、媒体流推送、日志聚合。注意事项设置 `duplex: 'half'` 以启用请求流;服务器需支持分块处理。配合 TransformStream 实现编码与压缩。参考资料MDN(Streams 使用):https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streamsChrome Docs(Streaming requests):https://web.dev/fetch-upload-streamingMDN(ReadableStream):https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream

发表评论 取消回复