Dav*_*han 10 python python-3.x google-cloud-storage google-compute-engine kubernetes
上传大文件(超过10Mb但小于100Mb)时出现此错误:
403 POST https://www.googleapis.com/upload/storage/v1/b/dm-scrapes/o?uploadType=resumable: ('Response headers must contain header', 'location')
Run Code Online (Sandbox Code Playgroud)
或者当文件超过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>)
Run Code Online (Sandbox Code Playgroud)
看来这个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)
Run Code Online (Sandbox Code Playgroud)
我们在Kubernetes pod中运行它,因此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')
Run Code Online (Sandbox Code Playgroud)