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

时间:2018-10-03 10:20:15

标签: python google-cloud-platform google-cloud-storage bucket

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

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

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

有什么方法可以下载而不先下载文件系统,然后再将其复制到Google云存储中?

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

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

上传:

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)

其中: 存储桶是您已设置的应用存储桶名称,而 object 是您要存储的对象(您可以在GCP控制台中找到存储桶名称的信息) 。另外,关于GCS存储桶的妙处在于,您可以在字面上存储所需的任何内容(即:无需指定要存储的内容或在存储之前对任何内容进行编码)。

选项2 :使用Google Cloud Storage Client Libraries存储数据。更准确地说,在uploading objects的帮助下,您正在寻找的功能是blob。 (您也可以在Blob中存储任何形式的数据)

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

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

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

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