将巨大的文件(> 2GB)压缩到客户端的ZIP中

Enr*_*ent 11 javascript compression upload html5 node.js

我使用node.js和构建上传工具socket.io,因为他们通常上传难以置信的巨大文件和正常的上传表格将无法正常工作.问题是他们希望在发送之前将文件压缩成zip,以提高传输效率.

我一直在研究像JSZipzip.js这样的压缩方法,但这些方法都不适用于非常大的文件.我能做什么?

che*_*_ca 8

您可以使用zip.js压缩最多4GB的数据,但是:

  • 它只适用于Chrome
  • 它会很慢(我的旧笔记本电脑上每GB压缩数据大约30分钟)

您可以使用此演示在线试用.您必须在"选择临时存储"输入中选择"HDD"选项.然后你可以从你的文件系统导入大文件并监视内存消耗:它应该是稳定的(我的笔记本电脑上大约300MB).

选择"HDD"意味着zip.js将使用File API:Directories和System来存储压缩数据.此API目前仅在Chrome上提供,并允许将数据写入沙盒虚拟文件系统.该演示使用不需要用户权限的临时存储.

编辑:您还可以实现自己的Writer构造函数来将数据流式传输到服务器,同时zip.js压缩它:它不依赖于文件系统API,应该适用于您支持的每个浏览器.Writer必须实现这两种方法:

init(callback[, onerror])
// initializes the stream where to write the zipped data

writeUint8Array(array, callback[, onerror])
// writes asynchronously a Uint8Array into the stream.

// getData method is optional
Run Code Online (Sandbox Code Playgroud)

以下是自定义Writer和Reader构造函数的示例.您还可以查看zip.js Writers实现以获取更多示例.