多个文件同时压缩和上传,不会导致内存溢出

问题描述 投票:0回答:1

在我的应用程序(Laravel + Inertia + Vue3)中,用户使用输入选择多个文件。我需要将它们压缩成zip并分块上传到服务器以进行进一步操作。

我尝试使用JSZip库,但是generateAsync()有一个问题 - 当用户选择大的总文件大小(例如500多个文件,超过3GB)时,我收到错误 RangeError: Array buffer allocate failed ,这是由于以下事实引起的首先需要在内存中创建完整的 zip,然后才使用块上传。

我不想将文件发送到服务器并在服务器端压缩它们,因为目标是使用最小的带宽。

所以我们的想法是,zip 文件应该在用户端生成并同时使用块上传,而不需要在内存中存储大的 zip 文件。谁能建议如何解决这个问题?

JSZIp 中的generateNodeStream() 是不行的,因为它没有得到广泛支持。

memory-leaks upload zip arraybuffer jszip
1个回答
0
投票

这当然是可能的,但您可能需要用 Javascript 编写自己的流式拉链。 zipflow 是 C 语言的示例。

© www.soinside.com 2019 - 2024. All rights reserved.