1

我有一个在 GAE 中运行的非常简单的 Flask Web 应用程序,它从 Firebase 存储下载一个 JSON 文件,并在必要时用更新的文件替换它。一切正常,但每当我尝试创建新文件时,GAE 都会引发 IOError 异常。我正在使用 Firebase 存储,因为我知道在 GAE 环境中无法读取/写入文件,但是我应该如何使用 Pyrebasestorage.child('foo.json').put('foo.json')函数呢?我做错了什么?请在下面检查我的代码。

firebase_config = {my_firebase_config_dict}

pyrebase_app = pyrebase.initialize_app(firebase_config)
storage = pyrebase_app.storage()

@app.route('/')
def check_for_updates() :
    try :
        json_feeds = json.loads(requests.get('http://my-firebase-storage-url/example.json').text()
        # Here I check if I need to update example.json
        # ...
        with open("example.json", "w") as file:
            json.dump(info, file)
            file.close()
            storage.child('example.json').put('example.json')
        return 'finished successfully!'
    except IOError :
        return 'example.json doesn't exists'
4

2 回答 2

2

如果我理解正确,您只需要在 GAE 中临时使用此文件,然后将其放入云存储中。根据此文档,您可以像在普通操作系统中一样执行此操作,但在 /tmp 文件夹中:

如果您的应用只需要写入临时文件,您可以使用标准 Python 3.7 方法将文件写入名为 /tmp 的目录

我希望它会有所帮助!

于 2020-05-07T09:45:40.097 回答
0

我终于这样做了,但我不知道这是否更好、最差或仅相当于@vitooh 解决方案。请告诉我:

firebase_config = {my_firebase_config_dict}

pyrebase_app = pyrebase.initialize_app(firebase_config)
storage = pyrebase_app.storage()

@app.route('/')
def check_for_updates() :
    try :
        blob = bucket.blob('example.json')
        example = json.loads(blob.download_as_string()
        # Here I check if I need to update example.json
        # ...
        if something_changed :
            blob.upload_from_string(example, content_type = 'application/json')
        return 'finished successfully!'
    except IOError :
        return 'example.json doesn't exists'
于 2020-05-07T19:02:43.563 回答