从 Cloud Storage 存储桶下载多个文件

Downloading multiple files from a Cloud Storage bucket

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

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

gsutil cp -r gs://my_bucket

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

可在此处找到 api 参考资料:https://cloud.google.com/storage/docs/apis

您可能需要结合 'authenticating to the API' 和 'JSON API -> API reference -> objects -> get' 中的信息。

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

不幸的是,不可能实现您的要求,正如您所建议的,唯一的解决方案是列出文件并一个一个地下载它们(这就是 gsutil 命令在罩)。

甚至code samples documentation

To easily download all objects in a bucket or subdirectory, use the gsutil cp command.

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

您可以调用两个 REST API 中的任何一个:JSON 或 XML。 要从 public Google Cloud Storage 存储桶下载文件,请使用 cURL 发出 GET 对象请求 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 的文档。我们有多个客户端 libraries/languages(Python API、Node.js、Java)的代码示例,以展示我们如何从 Cloud Storage 中的存储桶下载对象.

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

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。 另请查看此 以了解我们如何从 Cloud Storage 存储桶下载文件夹。

如果需要进行鉴权下载,Google云存储也支持签名URL下载。这些 URL 描述了 Google 云存储上的特定操作,例如下载,并带有时间敏感的签名。任何拥有 URL 的人都可以在 Google 云存储上执行指定的操作。它们可以安全地从服务器传递到客户端,但是在使用 Signed URLs 时,我们必须记住一些 considerations. We have code samples with a number of client libraries/languages which create signed URLs to download object.