如何解决如何通过云功能在Google存储桶中以二进制模式打开文件?
在我的云功能中,我需要在云存储中获取一个文件,然后通过HTTP POST请求将该文件发送到API。我尝试了以下代码:
storage_client = storage.Client()
bucket = storage_client.bucket(BUCKET_NAME)
source_blob_name = "/compressed_data/file_to_send.7z"
blob = bucket.blob(source_blob_name)
url = UPLOADER_BACKEND_URL
files = {'upload_file': blob}
values = {'id': '1','ouid': OUID}
r = requests.post(url,files=files,data=values)
它给出了一个错误:
Traceback (most recent call last): File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker_v2.py",...
\ line 90,in encode_multipart_formdata body.write(data) TypeError: a bytes-like object is required,not 'Blob'
如果此代码要在实际的VM上运行,则可以执行以下操作:
url = UPLOADER_BACKEND_URL
files = {'upload_file': open('/tmp/file_to_send.7z','rb')}
values = {'id': '1','name': 'John'}
r = requests.post(url,data=values)
问题是:在云函数中,如何从云存储中加载文件,使其输出与python open(filename,'rb')
函数相同?
我知道我可以先blob.download_to_file()
然后再open()
的文件,但是我想知道是否有更快的方法。
解决方法
在Cloud Functions参考中,您没有将Blob内容提供给API调用,而仅提供了Blob参考(文件路径+存储桶名称)。
实际上,您可以在内存文件系统/tmp
目录中本地下载文件。然后将此tmp文件作为任何文件进行处理。 上传后不要忘记删除它!
您也可以尝试the gcsfs
library,在这里您可以以Python惯用的方式处理文件。调用API时,我从未尝试过这样做,但是应该可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。