当前位置: 首页 > 知识库问答 >
问题:

从云存储桶下载多个文件

严亦
2023-03-14

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

阅读GCP留档时,我遇到了以下gsutil命令:

gsutil cp -r gs://my_bucket

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

共有3个答案

师谦
2023-03-14

您可以调用两个REST API中的任何一个:JSON或XML。要从公共Google云存储桶下载文件,请使用cURL向发出GET对象请求https://www.googleapis.com/storage/v1/b/

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请求的文档。我们有许多客户端库/语言(Python API、Node.js、Java)的代码示例,展示如何从云存储中的存储桶下载对象。

请注意,对于多个文件,您必须对请求进行编程,所以如果您想轻松下载桶或子目录中的所有对象,最好使用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命令的完整信息,请参阅此云存储文档。还可以看看这个stackoverflow线程,了解如何从云存储桶下载文件夹。

如果需要执行经过身份验证的下载,谷歌云存储还支持下载的签名URL。这些URL描述了谷歌云存储上的特定操作,比如下载,并带有时间敏感的签名。任何拥有URL的人都可以在谷歌云存储上执行指定的操作。它们可以安全地从服务器传递到客户端,但在使用签名URL时,我们必须记住一些注意事项。我们有许多客户端库/语言的代码示例,这些库/语言创建了用于下载对象的签名URL。

马臻
2023-03-14

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

您可能需要结合“对API进行身份验证”和“JSON API”中的信息-

或者,您也可以在云存储操作指南中找到这些信息:https://cloud.google.com/storage/docs/downloading-objects#rest-下载对象

黄弘盛
2023-03-14

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

即使是代码示例文档也说明了这一点

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

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

 类似资料:
  • 我是Google Cloud Platform的新手。我已经在datalab上训练了我的模型,并将模型文件夹保存在云存储中。我可以通过右键单击文件将桶中的现有文件下载到本地计算机-

  • 我需要从我的谷歌云存储从我的桶中下载NodeJS文件夹。我读了所有的留档,我只找到了下载文件而不是文件夹的方法。我需要获取/下载文件夹以提供用户的下载文件。 有人能帮我吗?

  • 我有一个谷歌云存储桶,我可以使用python中的函数下载对象,我也可以使用或函数下载整个目录。 有没有一种方法可以使用python作为单个zip文件从存储桶下载整个目录。 这样做Python——从谷歌云存储下载整个目录需要我逐个文件下载。 有没有办法一次下载整个目录?

  • 我在尝试从谷歌云存储下载CSV文件时遇到了一个问题。出于某种原因,它一直以字节而不是可读文本的形式下载文件。当我在Excel中打开下载的CSV时,Excel已经足够智能,可以将其转换为可读文本。我在这里错过了什么?我检查了谷歌的文档,但找不到任何好的信息来完成它们。提前谢谢你! 这是错误:UnicodeDecodeError:“utf-8”编解码器无法解码位置15-16的字节:无效的连续字节

  • 我正在使用Spring引导连接到谷歌云存储。 我能够连接到一个文件,并从谷歌云存储桶中读取内容。 但是我不能得到谷歌云存储桶中所有文件的列表。 请帮帮我。 这很有效 这不工作。 有什么原因吗?

  • 问题:我想从谷歌云存储桶中的文件夹(例如桶1中的文件夹1)复制文件到另一个桶(例如桶2)。我找不到任何谷歌云存储的气流操作员来复制文件。