google-cloud-platform - 如何在谷歌云存储上膨胀一个大的 zip 文件?
问题描述
我正在谷歌云上实现一个无服务器项目。用户将在云存储桶上上传 4GB 大小的 zip 文件。(上传前用户自行压缩文件)需要解压后才能处理内容。
我为小文件找到了一些解决方案:
- 将 zip 文件从存储桶下载到云功能
- 在函数中解压
- 将解压后的文件上传到存储桶
这里,函数下载的文件存储在分配给函数的内存空间中。但是,云功能的最大内存是 2GB,这对我来说太小了。
在最坏的情况下,我需要使用虚拟机,但这会很昂贵。
还有其他方法吗?首选语言是 python。
解决方案
node 的解决方案如下所示:
- 使用 @google-cloud/storage 库从存储中的 zip 文件创建读取流
- 通过管道将该流传输到unzip-stream之类的模块,该模块表示它允许您将压缩文件作为流处理。
- 对于 zip 中的每个条目,使用 Cloud Storage 库创建一个写入流到存储中的新文件,并将输入流从 unzip-stream 通过管道传输到新的输出流。
为了实现这一点,您可能需要很好地理解节点流。
由于这一切都是通过管道流(而不是一次将所有内容读入内存)发生的,因此它应该使用最少的内存。