首页 > 解决方案 > 如何在谷歌云存储上膨胀一个大的 zip 文件?

问题描述

我正在谷歌云上实现一个无服务器项目。用户将在云存储桶上上传 4GB 大小的 zip 文件。(上传前用户自行压缩文件)需要解压后才能处理内容。

我为小文件找到了一些解决方案:

  1. 将 zip 文件从存储桶下载到云功能
  2. 在函数中解压
  3. 将解压后的文件上传到存储桶

这里,函数下载的文件存储在分配给函数的内存空间中。但是,云功能的最大内存是 2GB,这对我来说太小了。

在最坏的情况下,我需要使用虚拟机,但这会很昂贵。

还有其他方法吗?首选语言是 python。

标签: google-cloud-platformzipgoogle-cloud-functionsgoogle-cloud-storageunzip

解决方案


node 的解决方案如下所示:

  1. 使用 @google-cloud/storage 库从存储中的 zip 文件创建读取流
  2. 通过管道将该流传输到unzip-stream之类的模块,该模块表示它允许您将压缩文件作为流处理。
  3. 对于 zip 中的每个条目,使用 Cloud Storage 库创建一个写入流到存储中的新文件,并将输入流从 unzip-stream 通过管道传输到新的输出流。

为了实现这一点,您可能需要很好地理解节点流。

由于这一切都是通过管道流(而不是一次将所有内容读入内存)发生的,因此它应该使用最少的内存。


推荐阅读