使用python上传文件返回请求失败,状态码为403,“预期之一”,<httpstatus.ok:200 =“”>

时间:2019-05-23 17:23:32

标签: python google-cloud-storage

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。

4 个答案:

答案 0 :(得分:1)

由于其他答案表明这与权限问题有关,我发现以下命令是为当前登录的用户创建默认应用程序凭据的有用方法。

假设您在某台机器上运行此代码时遇到此错误。只需执行以下步骤就足够了:

  • 通过 SSH 连接到正在或将要运行代码的虚拟机。确保您是用户,有权在 Google 存储中上传内容。
  • 运行以下命令: gcloud auth 应用程序-默认登录
  • 上面的命令将要求通过单击 url 创建令牌。生成令牌并粘贴到 ssh 控制台中。

就是这样。您以该用户身份启动的所有 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)