我有一个处理CSV文件并返回一些分析的应用程序。我的用户将文件存储在GCP云存储桶中,我希望他们能够向我传递一个存储桶URL和一些身份验证令牌/签名URL,然后应用程序将下载文件并根据需要解析它们。
阅读GCP留档时,我遇到了以下gsutil命令:
gsutil cp -r gs://my_bucket
这正是我所需要的,但是我正在通过一些REST API HTTP请求寻找同样的功能。我肯定有这样的东西存在,但似乎找不到。或者,如果我可以“列出”一个存储桶中的所有文件,然后逐个下载,这也没问题,但显然不太方便。
您可以调用两个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。
api参考可在此处找到:https://cloud.google.com/storage/docs/apis
您可能需要结合“对API进行身份验证”和“JSON API”中的信息-
或者,您也可以在云存储操作指南中找到这些信息:https://cloud.google.com/storage/docs/downloading-objects#rest-下载对象
不幸的是,要实现您的要求是不可能的,正如您所建议的,唯一的解决方案是列出文件并逐个下载(这就是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)。我找不到任何谷歌云存储的气流操作员来复制文件。