我们在上传大文件(大于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 does not run in python 3。
Tried this example:但遇到相同的错误:('Response headers must contain header', 'location')
There is also this library.但这基本上是alpha质量,几乎没有活动,并且一年没有提交。
预先感谢
答案 0 :(得分:3)
问题确实是凭证。不知何故,错误消息非常容易导致误导。当我们显式加载凭据时,问题就消失了。
# Explicitly use service account credentials by specifying the private key file.
storage_client = storage.Client.from_service_account_json(
'service_account.json')
答案 1 :(得分:0)
我发现我的节点池已使用
指定 oauthScopes:
- https://www.googleapis.com/auth/devstorage.read_only
并将其更改为
oauthScopes:
- https://www.googleapis.com/auth/devstorage.full_control
修复了该错误。如this issue中所述,问题是无关紧要的错误消息。