将数据直接下载到 google 云存储

Download data directly to google cloud storage

我想从 python application/command 下载数据(例如:youtube-dl 或任何其他从 下载的库第 3 方 url) 直接到 google 云存储(Bucket).

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

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

有没有什么方法可以让我无需先在文件系统上下载,然后再将其复制到 google 云存储来下载它?

谢谢,

您描述的情况似乎不可能:查看 Python 中 Cloud Storage library 的文档和源代码只给您 3 个选项:从文件上传(已经在您的磁盘中),上传提供文件名(磁盘中已有文件的路径)并从字符串上传(将文本上传为 .txt 文件)。

您需要从您提到的任何程序下载文件(如评论中所述,您可以将其下载到临时文件夹),将文件上传到 GCS,然后将其从您的临时文件夹中删除。

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

选项 1:将数据存储到 python 变量中,然后借助 boto client library plugin(使用 Python: 2.6.x 和 2.7.x )

Google 文档 here 概述了如何在 Python 中使用 boto 的想法(加上用法示例)。

但是,这里是 copy/paste 版本的 link,并提供了简要说明。

上传:

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

下载:

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

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

选项 2:使用 Google Cloud Storage Client Libraries. To be more precise, the functionality that you are looking for in your situation is uploading objects with the help of blob 存储您的数据。 (您也可以在 blob 中存储任何形式的数据)

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

upload_from_string(数据,content_type='text/plain',客户端=None,redefined_acl=None)

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

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