从文件夹内的谷歌云存储下载文件

Posted

技术标签:

【中文标题】从文件夹内的谷歌云存储下载文件【英文标题】:Downloading a file from google cloud storage inside a folder 【发布时间】:2017-07-22 03:53:52 【问题描述】:

我有一个 python 脚本,它获取已上传到谷歌云存储桶的文件列表,并尝试以字符串形式检索数据。

代码很简单:

file = open(base_dir + "/" + path, 'wb')
data =  Blob(path, bucket).download_as_string()
file.write(data)

我的问题是我上传的数据存储在存储桶的文件夹中,因此路径类似于:

folder/innerfolder/file.jpg

当google库尝试下载文件时,它以GET请求的形式获取,将上面的路径变成:

https://www.googleapis.com/storage/v1/b/bucket/o/folder%2Finnerfolder%2Ffile.jpg

有没有办法阻止这种情况发生/通过这种方式下载文件?干杯。

【问题讨论】:

【参考方案1】:

是的 - 您可以使用 python storage client library 来做到这一点。

只需使用pip install --upgrade google-cloud-storage 安装它,然后使用以下代码:

from google.cloud import storage

# Initialise a client
storage_client = storage.Client("[Your project name here]")
# Create a bucket object for our bucket
bucket = storage_client.get_bucket(bucket_name)
# Create a blob object from the filepath
blob = bucket.blob("folder_one/foldertwo/filename.extension")
# Download the file to a destination
blob.download_to_filename(destination_file_name)

您也可以使用.download_as_string(),但是当您将其写入文件时,直接下载到文件可能会更容易。

需要注意的唯一有点尴尬的是文件路径是 在存储桶名称之后的路径,因此与 Web 界面上的路径不完全一致。

【讨论】:

如何在 C# 中做到这一点?我无法在存储桶内的文件夹中获取对象。例如:bucket/folder/objectINeed.jpeg 嗨,@dspyank 我正在使用 C# 并遇到同样的问题,我可以从存储桶下载文件,但不能从目录中下载文件,我收到错误消息:"Exception throw: 'Google.GoogleApiException ' 在 mscorlib.dll 中"

以上是关于从文件夹内的谷歌云存储下载文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从能够搜索的谷歌云存储对象中获取视频流

无法上传文件到生产中的谷歌云存储

谷歌云存储 - 从网络下载文件

带有 gspythonlibrary 的谷歌云存储

身份验证不适用于使用 NodeJS 进行的谷歌云 API 身份验证

如何一次性将整个 blob(图像)文件夹从谷歌存储桶下载到 AI Platform Notebooks?