从XmlHttpRequest转换Blob而不将其完全加载到内存中

时间:2014-12-16 12:05:02

标签: javascript ajax file fileapi

我想在浏览器中实现客户端文件解密。它从服务器获取解密文件,并在浏览器中解密,显示另存为对话框以保存解密文件。它也适用于大文件(1 GB或更多)。

我有以下策略:

  • 使用XMLHttpRequest responseType = 'blob'下载文件。
  • 通过转换XMLHttpRequest给出的Blob来解密。
  • 将解密的Blob作为objectURL提供给用户。

解密可以像流转换一样工作,它从下载的Blob中读取块,解密数据并写入输出Blob。

然而,据我所知,如果您可以将整个文件加载到内存中,则只能使用当前浏览器(您需要在创建objectURL之前将完整的解密blob存储在内存中)。似乎BlobXMLHttpRequestcreateObjectURL接口不支持任何类型的读/写,如Mozilla Developer Network所述。 Blob是不可变的,并且似乎不是浏览器中对二进制数据的流式支持。

有没有办法用当前的浏览器实现这个?

1 个答案:

答案 0 :(得分:0)

获得Blob responseType = 'blob';后,您可以使用blob.slice(start, end)获取子视图,并使用FileReader API获取与此子视图关联的数据。