惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
博客园 - 叶小钗
爱范儿
爱范儿
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
T
Tailwind CSS Blog
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
小众软件
小众软件
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次
IndexDB实现大文件下载的思路 - 新锐博客
莫忘 · 2026-06-15 · via BlogFinder

前言

最近都在和浏览器存储打交道,不可避免的知道了一个新的存储方式IndexDB。

介绍

IndexedDB 是浏览器内置的一个非关系型数据库,和 localStorage 不同,它可以存储大量结构化数据(包括文件和二进制数据),并且支持索引查询和事务操作。单个域名的存储上限通常在几百 MB 到几 GB,远比 localStorage 的 5MB 大得多。

常见浏览器存储方案对比:

方案容量类型适用场景
localStorage~5MB字符串小量配置、token
sessionStorage~5MB字符串会话级临时数据
Cookie4KB字符串身份标识
Cache API较大Request/Response离线缓存
IndexedDB数百MB~GB任意结构化数据大量数据、文件存储

为什么用 IndexedDB 处理大文件下载

下载大文件(比如几百 MB 的视频、压缩包)时,传统方式会遇到几个问题:

  1. 内存爆炸:如果把整个文件存在内存中(Blob),大文件会直接撑爆内存,页面卡死甚至崩溃
  2. 无法断点续传:浏览器默认下载一旦中断就要重来,用户体验很差
  3. 无法持久化:刷新页面后内存中的数据就没了

IndexedDB 恰好能解决这些问题:

  • 数据存在磁盘上,不占用内存
  • 支持事务操作,可以随时写入、读取部分数据
  • 持久化存储,刷新页面不会丢失

实现思路

核心思路很简单:分块下载 + 逐块写入 IndexedDB + 最后合并导出

整个流程分为四步:

  1. 初始化数据库:创建 IndexedDB 数据库和对象存储
  2. 分块下载:通过 HTTP Range 请求,每次下载固定大小的数据块
  3. 逐块写入:每下载完一个块,立即写入 IndexedDB
  4. 合并导出:所有块下载完成后,从 IndexedDB 读取并合并成完整文件,触发浏览器下载

结语

IndexedDB 处理大文件下载的核心优势就是不占内存 + 持久化 + 支持断点续传。相比传统方式,它让大文件下载在浏览器端变得可控且稳定。

完整流程总结:HEAD 请求获取大小 → Range 分块下载 → 逐块写入 IndexedDB → 合并 Blob 导出。这个思路同样适用于大文件上传,只不过是将”下载”换成”读取文件分片 + 上传分片”。

但是缺点也很明显,就是需要等待所有块下载完成后,才能合并导出文件。

莫忘

君子喻以义,小人喻以利

本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 新锐博客