1 回答

TA贡献1851条经验 获得超5个赞
credentials = files.upload()
storage_client = storage.Client.from_service_account_json(credentials)
这两行是我认为的问题。第一个实际加载文件的内容,但第二个需要文件的路径,而不是内容。
让我们先解决第一行:我看到credentials在调用后传递你得到的credentials = files.upload()将不起作用,如它的文档中所解释的那样。像你正在做的credentials那样做,实际上并不直接包含文件的值,而是文件名和内容的字典。
假设您只上传 1 个凭据文件,您可以像这样获取文件的内容(从这个 SO 答案中窃取):
from google.colab import files
uploaded = files.upload()
credentials_as_string = uploaded[uploaded.keys()[0]]
所以现在我们实际上将上传文件的内容作为一个字符串,下一步是从中创建一个实际的凭据对象。
Github 上的这个答案显示了如何从转换为 json 的字符串创建凭据对象。
import json
from google.oauth2 import service_account
credentials_as_dict = json.loads(credentials_as_string)
credentials = service_account.Credentials.from_service_account_info(credentials_as_dict)
最后我们可以使用这个凭证对象创建存储客户端对象:
storage_client = storage.Client(credentials=credentials)
请注意,我没有对此进行测试,所以请试一试,看看它是否真的有效。
添加回答
举报