首页 > 解决方案 > 将数据直接下载到谷歌云存储

问题描述

我想将数据从python 应用程序/命令(例如:youtube-dl 或从 3rd 方 url 下载的任何其他库)直接下载到google cloud storage(Bucket)

我使用gsutil stream 命令将数据直接从进程流式传输到 gcs,但它仅将控制台输出保存到存储桶

我也不想挂载存储,因为我想与分布式系统共享该存储

有什么方法可以下载它而无需先在文件系统上下载然后将其复制到谷歌云存储?

谢谢,

标签: pythongoogle-cloud-platformgoogle-cloud-storagebucket

解决方案


据我了解,您正在寻找除gsutil 流之外的另一种技术直接存储到您的存储桶中。考虑到您已经有 Python 的命令应用程序。你有几个选择来实现你的目标:

选项 1:将您的数据存储到 python 变量中,然后借助 boto 客户端库插件(使用 Python:2.6.x 和 2.7.x)将其推送到您的存储桶中

此处的 Google 文档概述了如何在 Python 中使用 boto 的想法(以及使用示例)。

但是,这里是该链接的复制/粘贴版本,并提供了简要说明。

上传:

dst_uri = boto.storage_uri( + '/' + , 'gs') dst_uri.new_key().set_contents_from_stream()

下载:

导入 sys src_uri = boto.storage_uri( + '/' + , 'gs') src_uri.get_key().get_file(sys.stdout)

其中: bucket是您设置的应用程序存储桶名称,object是您希望存储的对象(您可以在 GCP 控制台中找到您的存储桶名称的信息)。此外,GCS 存储桶的优点在于您可以将任何您想要的内容存储到其中(即:无需在存储之前指定要存储的内容或对任何内容进行编码)。

选项 2:使用Google 云存储客户端库存储您的数据。更准确地说,您正在寻找的功能是在blob的帮助下上传对象。(您也可以在 blob 中存储任何形式的数据)

由于您不想在本地保存并直接存储到您的存储桶中。我建议使用以下方法:

upload_from_string(data, content_type='text/plain', client=None, redefined_acl=None)

(Google 定义:从提供的字符串上传此 blob 的内容)

此方法需要注意的重要一点是,您可以设置要存储的数据类型。根据您尝试存储的内容(从 3rd 方 url 下载的库),您可以在strbytes之间进行选择。但是,我建议先尝试字节,因为它允许 ASCII 字符。


推荐阅读