如何使用云函数解压缩云存储中的大文件?



我有一个云函数,当 zip 上传到云存储并应该解压缩它时会触发它。但是,该函数内存不足,可能是因为解压缩的文件太大(~2.2 Gb(。 我想知道处理这个问题的选择是什么?我读到可以将大文件流式传输到云存储中,但我不知道如何从云功能或解压缩时执行此操作。任何帮助将不胜感激。

以下是到目前为止云函数的代码:

storage_client = storage.Client()
bucket = storage_client.get_bucket("bucket-name")
destination_blob_filename = "large_file.zip"
blob = bucket.blob(destination_blob_filename)
zipbytes = io.BytesIO(blob.download_as_string())
if is_zipfile(zipbytes):
with ZipFile(zipbytes, 'r') as myzip:
for contentfilename in myzip.namelist():
contentfile = myzip.read(contentfilename)
blob = bucket.blob(contentfilename)
blob.upload_from_string(contentfile)

您的目标流程存在风险:

  • 如果在未完全解压缩的情况式传输文件,则无法验证 zip 的校验和
  • 如果将数据流式传输到 GCS,则无法保证文件完整性

因此,您有 2 个成功的操作,无需校验和验证!

在云函数或云运行具有更多内存之前,可以使用数据流模板解压缩文件

相关内容

最新更新