我正在使用node.js
和socket.io
构建上传工具,因为它们通常会上传非常大的文件,而普通的上传表单也无法正常工作。问题是他们希望在发送之前将文件压缩成zip,以提高传输效率。
答案 0 :(得分:8)
您可以使用zip.js压缩最多4GB的数据,但是:
您可以使用this demo在线试用。您必须在“选择临时存储”输入中选择“HDD”选项。然后你可以从你的文件系统导入大文件并监视内存消耗:它应该是稳定的(我的笔记本电脑上大约300MB)。
选择“HDD”意味着zip.js将使用File API: Directories and System来存储压缩数据。此API目前仅在Chrome上提供,并允许将数据写入沙盒虚拟文件系统。该演示使用临时存储,不需要用户许可。
编辑:您还可以实现自己的Writer constructor功能,以便在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
这是自定义Writer和Reader构造函数的an example。您还可以查看zip.js Writers implementations以获取更多示例。
答案 1 :(得分:4)
如果您正在寻找客户端的压缩器,我很遗憾地告诉您,JS不是可行的方法。
从这一方面来看,最好的办法是告诉用户在上传之前压缩文件。或者甚至使用其他类型的工具(FTP也许?)。
编辑:
哦,顺便说一句,ZIP对于随机数据来说效率非常低,所以你会浪费CPU时间进行压缩/解压缩,你几乎不会缩小任何大小。