前端下载超大文件的完整方案
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
本文从前端方面出发实现浏览器下载大文件的功能。不考虑网络异常、关闭网页等原因造成传输中断的情况。分片下载采用串行方式(并行下载需要对切片计算hash,比对hash,丢失重传,合并chunks的时候需要按顺序合并等,很麻烦。对传输速度有追求的,并且在带宽允许的情况下可以做并行分片下载)。
实现步骤
以下是一个基本的前端大文件下载的实现示例: 可以在类里面增加注入一个回调函数,用来更新外部的一些状态,示例中只展示下载完成后的回调
分片下载怎么实现断点续传?已下载的文件怎么存储?浏览器的安全策略禁止网页(JS)直接访问和操作用户计算机上的文件系统。 在分片下载过程中,每个下载的文件块(chunk)都需要在客户端进行缓存或存储,方便实现断点续传功能,同时也方便后续将这些文件块合并成完整的文件。这些文件块可以暂时保存在内存中或者存储在客户端的本地存储(如 IndexedDB、LocalStorage 等)中。 一般情况下,为了避免占用过多的内存,推荐将文件块暂时保存在客户端的本地存储中。这样可以确保在下载大文件时不会因为内存占用过多而导致性能问题。 在上面提供的示例代码中,文件块是暂时保存在一个数组中的,最终在 IndexedDB本地存储IndexedDB文档:IndexedDB_API
IndexedDB 数据实际上存储在浏览器的文件系统中,是浏览器的隐私目录之一,不同浏览器可能会有不同的存储位置,普通用户无法直接访问和手动删除这些文件,因为它们受到浏览器的安全限制。可以使用 原生的indexedDB api 使用起来很麻烦,稍不留神就会出现各种问题,封装一下方便以后使用。 这个类封装了 IndexedDB 的常用操作,包括打开数据库、添加数据、通过 ID 获取数据、获取全部数据、更新数据、删除数据和删除数据表。 封装indexedDB类
使用indexedDB类示例:
indexedDB的使用库 - localforage这个库对浏览器本地存储的几种方式做了封装,自动降级处理。但是使用indexedDB上感觉不是很好,不可以添加索引,但是操作确实方便了很多。 文档地址: localforage 下面展示 LocalForage 中使用 IndexedDB 存储引擎并结合
现代的浏览器会自动管理 IndexedDB 连接的生命周期,包括在页面关闭时自动关闭连接,在大多数情况下,不需要显式地打开或关闭 IndexedDB 连接。 如果你有特殊的需求或者对性能有更高的要求,可以使用 使用 LocalForage 来删除 IndexedDB 中的所有数据
IndexedDB内存暂用过高问题使用 IndexedDB 可能会导致浏览器内存占用增加的原因有很多,以下是一些可能的原因:
为了减少内存占用,你可以考虑优化数据存储结构、合理使用索引、避免长时间保持大型数据集等措施。另外,使用浏览器的开发者工具进行内存分析,可以帮助你找到内存占用增加的具体原因,从而采取相应的优化措施。 本文来自博客园,作者:甜点cc,转载请注明原文链接:https://www.cnblogs.com/all-smile/p/18096224 该文章在 2024/4/30 9:39:18 编辑过 |
关键字查询
相关文章
正在查询... |