从 Cloud Storage 存储分区下载多个文件

Posted

技术标签:

【中文标题】从 Cloud Storage 存储分区下载多个文件【英文标题】:Downloading multiple files from a Cloud Storage bucket 【发布时间】:2021-12-10 20:10:58 【问题描述】:

我有一个处理 CSV 文件并返回一些分析的应用程序。我的用户将文件存储在 GCP Cloud Storage 存储桶中,我想让他们向我传递存储桶 URL 和一些身份验证令牌/签名 URL,然后应用程序将下载文件并根据需要解析它们。

阅读 GCP 文档后,我发现了以下 gsutil 命令:

gsutil cp -r gs://my_bucket

这正是我所需要的,但是我正在通过一些 REST API HTTP 请求来寻找同样的功能。我确信存在这样的东西,但似乎找不到。或者,如果我可以“列出”存储桶中的所有文件并逐个下载它们,这也可以,但显然不太方便。

【问题讨论】:

【参考方案1】:

不幸的是,无法实现您的要求,唯一的解决方案,正如您所建议的那样,是列出文件并逐个下载(这是 gsutil 命令在后台执行的操作)。

即使是code samples documentation 状态

要轻松下载存储桶或子目录中的所有对象,请使用 gsutil cp 命令。

但是,您可以使用 subprocess 在您的 python 脚本中调用 gsutil 命令。

【讨论】:

【参考方案2】:

api参考可以在这里找到:https://cloud.google.com/storage/docs/apis

您可能需要结合“向 API 进行身份验证”和“JSON API -> API 参考 -> 对象 -> 获取”中的信息。

您也可以在云存储操作指南中找到此信息:https://cloud.google.com/storage/docs/downloading-objects#rest-download-object

【讨论】:

【参考方案3】:

您可以调用以下两种 REST API 中的任何一种:JSON 或 XML。 要从公共 Google Cloud Storage 存储桶下载文件,请使用 cURL 发出 GET Object 请求以 https://www.googleapis.com/storage/v1/b/<bucket>/o/<object>,其中<bucket> 是您的 Google Cloud Storage 存储桶的名称,<object> 是存储桶中文件的名称。这应该与来自OAuth 2.0的授权访问令牌一起使用

JSON API:

curl -X GET \ -H "Authorization: Bearer [OAUTH2_TOKEN]" \ -o "[SAVE_TO_LOCATION]" \ "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]?alt=media"

XML API:

curl -X GET \ -H "Authorization: Bearer [OAUTH2_TOKEN]" \ -o "[SAVE_TO_LOCATION]" \ "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]"

您可以阅读有关此 API 请求 here 的文档。我们提供了包含多种客户端库/语言(Python API、Node.js、Java)的代码示例,以展示我们如何从 Cloud Storage 中的存储桶下载对象。

请注意,对于多个文件,您必须对请求进行编程,因此如果您想轻松下载存储桶或子目录中的所有对象,最好使用gsutil。同样对于传输,您可能希望使用gsutil -m 选项来执行并行(多线程/多处理)复制:

gsutil -m cp -R gs://your-bucket 

如果要复制到特定目录,请注意该目录必须先存在,因为 gsutils 不会自动创建它。

mkdir my-bucket-local-copy && gsutil -m cp -r gs://your-bucket my-bucket-local-copy

下载文件的时间可以显着减少。有关 GCS cp 命令的完整信息,请参阅此Cloud Storage documentation。 另请查看*** thread,了解我们如何从 Cloud Storage 存储桶下载文件夹。

如果您需要执行经过身份验证的下载,Google Cloud Storage 还支持下载签名 URL。这些 URL 描述了 Google Cloud Storage 上的特定操作,例如下载,并带有时间敏感的签名。任何拥有该 URL 的人都可以在 Google Cloud Storage 上执行指定的操作。它们可以安全地从服务器传递到客户端,但是在使用签名 URL 时,我们必须记住一些 considerations。我们有一些带有client libraries/languages which create signed URLs to download object 的代码示例。

【讨论】:

以上是关于从 Cloud Storage 存储分区下载多个文件的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine 应用无法访问 Google Cloud Storage 存储分区

如何为 Cloud Build 用于 Cloud Run 部署的 Cloud Storage 存储分区指定区域?

Dataproc 不导入存储在 Google Cloud Storage 存储分区中的 Python 模块

从 Google Cloud Storage Bucket 下载文件夹

有没有办法通过存储在 Google Cloud Storage 中的文本文档进行 grep?

`TFRecord` 从 Google BigQuery 转储到 Google Cloud Storage