好吧,我是IndexedDB新手,对Javascript不是很有经验。现在,我已经编写了一些代码,用户可以浏览到他们文件系统上的一个文件,当选择该文件时,该文件会被分解成块(通过使用slice),这些块会被转换为十六进制字符串,字符串(沿着一个键)会存储在IndexedDB中。
这种模态的好处是用户可以选择一个非常大的文件,而且,由于我使用了正确的构造,所以不必一次将整个文件加载到内存中。
现在,我尝试重新读取这些十六进制字符串,并在用户单击按钮时让浏览器弹出“另保存为”对话框。问题是,我还没有找到一种方法来将数据从IndexedDB“流式”到另存为输入中。你们中有人知道这样做的方法吗?我的方法相当有限。
谢谢
2条答案
按热度按时间eoxn13cs1#
IndexedDB不能对记录进行部分(或投影)读/写。API似乎是有可能的,因为它是用于像对大文件进行顺序查找这样的用例,但我不确定。
你可能想看看最近的讨论IndexedDB, Blobs and partial Blobs - Large Files,他们也讨论了你的问题的解决方法。
jyztefdp2#
因此,我也希望这样做,并将随着实施的进展更新这个答案。
其思想是在indexdb中创建两个实体类型。
1.锉
1.页
对于存储在 IndexedDB 中的每个文件,文件实体中都将有一个条目。
文件的内容将存储在页面实体中。内容将被拆分为“页面”,其中每个页面都是某个(任意)固定大小,如16KB。
我的代码将在dart中编写(交叉编译为javascript),但逻辑应该很容易直接移植到js。
我将创建一个类,它的操作有点像随机访问文件。
注意:这只是伪代码。