我是一个Ruby开发人员,正在尝试用Python编写的Google云函数,但在将一个来自给定URL的远程文件传输到googlecloudstorage(GCS)时遇到了困难。在
在一个等效的RoR应用程序中,我下载到应用程序的临时存储中,然后上传到GSC。在
我希望有一种方法可以通过云函数将远程文件“下载”到我的GCS存储桶中。在
下面是一个简单的例子,我用一些注释来做什么,真正的代码从一个私有API中获取url,但是这很好,并且不是问题所在。在
from google.cloud import storage
project_id = 'my-project'
bucket_name = 'my-bucket'
destination_blob_name = 'upload.test'
storage_client = storage.Client.from_service_account_json('my_creds.json')
# This works fine
#source_file_name = 'localfile.txt'
# When using a remote URL I get 'IOError: [Errno 2] No such file or directory'
source_file_name = 'http://www.hospiceofmontezuma.org/wp-content/uploads/2017/10/confused-man.jpg'
def upload_blob(bucket_name, source_file_name, destination_blob_name):
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_name)
upload_blob(bucket_name, source_file_name, destination_blob_name)
提前谢谢。在
通过Cloud Transfer服务可以直接将URL传输到GCS中,但是为单个URL设置云传输作业是一个很大的开销。这种解决方案针对的是需要成为GCS对象的数百万url。在
相反,我建议编写一个作业,将从读取URL到写入流的传入流泵送到GCS,并在Google云中靠近bucket的某个地方运行它。在
不可能直接从URL上传文件到Google云存储。由于您是从本地环境运行脚本,所以要上载的文件内容必须位于同一环境中。这意味着url的内容需要存储在内存中,或者存储在文件中。在
一个基于您的代码演示如何执行此操作的示例:
选项1:您可以使用
wget
模块,该模块将获取url并将其内容下载到本地文件中(类似于wget
CLI命令)。请注意,这意味着该文件将存储在本地,然后从该文件上载。我添加了os.remove
行,以便在上载完成后删除该文件。在选项2:使用
^{pr2}$urllib
模块的工作原理与wget
模块类似,但它不是写入文件而是写入变量。请注意,我在Python3中做了这个示例,there are some differences如果您计划在python2.X中运行脚本相关问题 更多 >
编程相关推荐