`title: Fetch Range 请求与断点下载持久化实践``categories: Web 开发/前端/数据管理``keywords: Fetch,Range,部分内容,断点下载,OPFS,分块``description: 使用 HTTP Range 请求实现断点下载与续传,将分块内容写入 OPFS 并在完成后合并,提升大型文件的下载可靠性。`计算块与请求async function fetchChunk(url, start, end) { const res = await fetch(url, { headers: { Range: `bytes=${start}-${end}` } }); if (!res.ok && res.status !== 206) throw new Error('Range not supported'); return new Uint8Array(await res.arrayBuffer()); } 写入 OPFS(分块)async function writeChunk(name, idx, bytes) { const root = await navigator.storage.getDirectory(); const handle = await root.getFileHandle(`${name}.part${idx}`, { create: true }); const w = await handle.createWritable(); await w.write(bytes); await w.close(); } 合并块async function mergeChunks(name, count) { const root = await navigator.storage.getDirectory(); const out = await root.getFileHandle(name, { create: true }); const w = await out.createWritable(); for (let i = 0; i < count; i++) { const h = await root.getFileHandle(`${name}.part${i}`); const file = await h.getFile(); await w.write(await file.arrayBuffer()); } await w.close(); } 续传策略记录已完成块索引与大小到 IndexedDB;失败重试仅请求缺失块;合并后清理分块。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.348920s