[英]Uploading large files to Google Storage GCE from a Kubernetes pod
上传大文件(大于10Mb但小于100Mb)时,我们会收到此错误消息:
403 POST https://www.googleapis.com/upload/storage/v1/b/dm-scrapes/o?uploadType=resumable: ('Response headers must contain header', 'location')
或文件大于5Mb时出现此错误
403 POST https://www.googleapis.com/upload/storage/v1/b/dm-scrapes/o?uploadType=multipart: ('Request failed with status code', 403, 'Expected one of', <HTTPStatus.OK: 200>)
看来该API正在查看文件大小,并尝试通过多部分或可恢复方法上传它。 我无法想象这是我应该关注的API调用者。 问题是否与权限相关? 存储桶是否需要特殊许可,它可以接受分段上传或可恢复上传。
from google.cloud import storage
try:
client = storage.Client()
bucket = client.get_bucket('my-bucket')
blob = bucket.blob('blob-name')
blob.upload_from_filename(zip_path, content_type='application/gzip')
except Exception as e:
print(f'Error in uploading {zip_path}')
print(e)
我们在Kubernetes窗格中运行此命令,以便由storage.Client()调用自动获取权限。
我们已经尝试过这些:
无法使用gsutil上传,因为该容器是Python 3并且gsutil不在python 3中运行 。
尝试了此示例 :但遇到相同的错误:( ('Response headers must contain header', 'location')
也有这个图书馆。 但这基本上是alpha质量,几乎没有活动,一年也没有提交。
提前致谢
问题的确是证书。 不知何故,错误消息非常容易导致误导。 当我们显式加载凭据时,问题就消失了。
# Explicitly use service account credentials by specifying the private key file.
storage_client = storage.Client.from_service_account_json(
'service_account.json')
我发现我的节点池已指定
oauthScopes:
- https://www.googleapis.com/auth/devstorage.read_only
并将其更改为
oauthScopes:
- https://www.googleapis.com/auth/devstorage.full_control
解决了错误。 如本问题中所述,问题是无信息的错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.