如何将JSON文件上载到Google云存储?

2024-04-25 04:58:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想上传一个JSON文件/字典到谷歌云存储,但无论我怎么尝试,我都会出错。这是不可能的吗

下面是我的Python代码:

response = requests.get(url, headers=headers)

json_data = response.json()

storage_client = storage.Client()
bucket = storage_client.bucket("syr_test_bucket1")

blob = bucket.blob(json_data)
blob.upload_from_filename(json_data)

我得到的错误是:

Traceback (most recent call last):
  File "/layers/google.python.pip/pip/bin/functions-framework", line 8, in <module>
    sys.exit(_cli())
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/functions_framework/_cli.py", line 37, in _cli
    app = create_app(target, source, signature_type)
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/functions_framework/__init__.py", line 237, in create_app
    spec.loader.exec_module(source_module)
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/workspace/main.py", line 16, in <module>
    blob = bucket.blob(json_data)
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/google/cloud/storage/bucket.py", line 716, in blob
    return Blob(
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/google/cloud/storage/blob.py", line 221, in __init__
    name = _bytes_to_unicode(name)
  File "/layers/google.python.pip/pip/lib/python3.8/site-packages/google/cloud/_helpers.py", line 389, in _bytes_to_unicode
    raise ValueError("%r could not be converted to unicode" % (value,))

Tags: pipinpyjsonbucketlibpackageslayers
1条回答
网友
1楼 · 发布于 2024-04-25 04:58:05

API函数的错误使用:

函数Bucket.blob(blob_name, ...)接受一个blob名称作为输入-从response.json()调用中为其提供一个JSON字符串

除非您的JSON与blobname 100%相同,否则这是行不通的


upload_from_filename函数需要文件名-您提供的字符串不是文件名:

blob.upload_from_filename(pretty_json)。。。似乎这需要一个文件在你的磁盘上。。。内存中没有字符串。。。(使用upload_from_string表示该内容):

blob.upload_from_string(pretty_json)

或创建一个文件:

with open("dummy.json") as f:
    f.write(pretty_json)

blob.upload_from_filename("dummy.json")

参考资料:

相关问题 更多 >