2013-12-18 49 views
3

好的,所以我是IndexedDB的新手,对Javascript没有特别的经验。现在,我已经有了代码工作,用户可以浏览文件系统中的文件,并且在选中时将文件分解为块(通过使用片),将这些块转换为十六进制字符串,然后字符串(和一个键)存储在IndexedDB中。IndexedDB保存范围为

这种模式的好处是用户可以选择一个非常大的文件,而且,由于我使用的是正确的结构,整个文件不需要一次加载到内存中。

现在我试图读取这些十六进制字符串,当浏览器弹出一个“另存为”对话框时,用户点击一个按钮。问题是我没有设法找到一种方法将数据从IndexedDB“流”到另存为输入。你们有没有意识到有办法做到这一点?我的结局很短暂。

由于

+0

我不认为你可以流它。我可以很容易找出一种方法来合并数据并保存它,但流式传输:除非您愿意上传到服务器然后进行流式传输(这完全破坏了这一点),但我认为没有办法 – Markasoftware

+0

Right 。我已经考虑过两种情况,我担心如果文件太大,将所有十六进制(或base64或blob或其他)连接在一起可能会引发内存异常。 FileReader slice操作让我可以一次处理一个文件块,我真的希望这个文件有一个可行的选项。 –

+0

喜欢...多大? – Markasoftware

回答

1

索引资料不能做部分(或凸起)上读取记录/写。 FileSystem API似乎很可能是因为它是针对像大型文件顺序查找这样的用例,但我不确定。

你可能想看看这个最近的讨论,IndexedDB, Blobs and partial Blobs - Large Files。他们也会讨论解决问题的方法。

+1

你所关联的讨论将数据处理到IndexedDB中,这不是我的问题。我的愿望是向最终用户提供一个链接单击时,将导致浏览器提示他们将文件保存在本地系统的某个位置,然后当他们选择一个位置时,从IndexedDB一次读取一个条目的数据,将条目依次连接到组成结果文件。 –