Загрузка файла JSON с помощью Pyrebase в хранилище Firebase из Google App Engine - PullRequest
1 голос
/ 06 мая 2020

У меня есть довольно простое веб-приложение Flask, работающее в GAE, которое загружает файл JSON из Firebase Storage и при необходимости заменяет его обновленным. Все работает нормально, но GAE выдает исключение IOError всякий раз, когда я пытаюсь создать новый файл. Я использую Firebase Storage, потому что знаю, что в среде GAE невозможно читать / записывать файлы, но как же тогда использовать функцию Pyrebase storage.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'

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Если я правильно понял, вам просто нужен этот файл временно в GAE, а потом поместите его в облачное хранилище. В соответствии с этим do c вы можете сделать это как в обычной ОС, но в папке / tmp:

, если вашему приложению нужно только записывать временные файлы, вы можете использовать стандартные Python 3.7 методы для записи файлов в каталог с именем / tmp

Надеюсь, это поможет!

0 голосов
/ 07 мая 2020

Наконец-то я сделал это вот так, но я не знаю, лучше ли это, хуже или просто эквивалентно решению @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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...