在我的应用程序(Laravel + Inertia + Vue3)中,用户使用输入选择多个文件。我需要将它们压缩成zip并分块上传到服务器以进行进一步操作。
我尝试使用JSZip库,但是generateAsync()有一个问题 - 当用户选择大的总文件大小(例如500多个文件,超过3GB)时,我收到错误 RangeError: Array buffer allocate failed ,这是由于以下事实引起的首先需要在内存中创建完整的 zip,然后才使用块上传。
我不想将文件发送到服务器并在服务器端压缩它们,因为目标是使用最小的带宽。
所以我们的想法是,zip 文件应该在用户端生成并同时使用块上传,而不需要在内存中存储大的 zip 文件。谁能建议如何解决这个问题?
JSZIp 中的generateNodeStream() 是不行的,因为它没有得到广泛支持。
这当然是可能的,但您可能需要用 Javascript 编写自己的流式拉链。 zipflow 是 C 语言的示例。