blob.upload_from_filename(source)
给出错误
引发异常。from_http_status(response.status_code,消息,> response = response) google.api_core.exceptions.Forbidden:403 POST> https://www.googleapis.com/upload/storage/v1/b/bucket1-newsdata-> bluetechsoft / o?uploadType = multipart :(“请求失败,状态为> code”,403,“预期中的一个”,)
我正在用python here编写的Google云示例!
from google.cloud import storage
def upload_blob(bucket, source, des):
client = storage.Client.from_service_account_json('/path')
storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket)
blob = bucket.blob(des)
blob.upload_from_filename(source)
我使用gsutil上传文件,效果很好。
尝试使用python脚本列出存储桶名称,该脚本也可以正常工作。
我拥有必要的权限并设置了GOOGLE_APPLICATION_CREDENTIALS。
答案 0 :(得分:1)
由于其他答案表明这与权限问题有关,我发现以下命令是为当前登录的用户创建默认应用程序凭据的有用方法。
假设您在某台机器上运行此代码时遇到此错误。只需执行以下步骤就足够了:
就是这样。您以该用户身份启动的所有 Python 应用程序都将使用此凭据作为存储桶交互的默认凭据。
GCP 快乐 :)
答案 1 :(得分:0)
此问题更适合support case。
当您获得403时,很可能是您缺少对IAM的许可,Google Cloud Platform支持团队将能够检查您的资源和配置。
答案 2 :(得分:0)
由于我在GCP中使用的服务帐户没有权限 storage admin
,因此整个操作都无法正常工作。
允许storage admin
进入我的服务帐户解决了我的问题。
答案 3 :(得分:0)
当Google文档不起作用时,这对我有用。我在具有适当权限的情况下遇到相同的错误。
import pathlib
import google.cloud.storage as gcs
client = gcs.Client()
#set target file to write to
target = pathlib.Path("local_file.txt")
#set file to download
FULL_FILE_PATH = "gs://bucket_name/folder_name/file_name.txt"
#open filestream with write permissions
with target.open(mode="wb") as downloaded_file:
#download and write file locally
client.download_blob_to_file(FULL_FILE_PATH, downloaded_file)