当Firestore文档中的字段设置为true时,Firestore将图像上载到存储器

2024-04-20 07:26:08 发布

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

我需要检查Firestore上文档中的布尔值(字段名为“NewImageRequested”),当该值设置为True(由另一个应用程序设置)时,我必须将图片上载到存储器,并将该值设置回False

到目前为止,我一直在这样做:

db_credentials_file = 'local_file.json'

firebase_config = {
    'apiKey': "AIzaSyCi2_82wp1txEv6PbmY7TpPJCA-tlKfXnc",
    'authDomain': "coachmylife-dev.firebaseapp.com",
    'databaseURL': "https://coachmylife-dev.firebaseio.com",
    'projectId': "coachmylife-dev",
    'storageBucket': "coachmylife-dev.appspot.com",
    'messagingSenderId': "317036767832",
    'appId': "1:317036767832:web:6a5a4e61f794bd7db6382d",
    'measurementId': "G-HGE4Q3R0GM",
    'serviceAccount': db_credentials_file
}


firebase_storage = pyrebase.initialize_app(firebase_config)
storage = firebase_storage.storage()
cred = credentials.Certificate(f"{db_credentials_file}")
firebase_data = firebase_admin.initialize_app (cred)
db = firestore.client()
print('Connection initialized')


doc_ref = db.collection(u'CollectionName').document(u'DocumentName')


def main():
    doc_watch = doc_ref.on_snapshot(on_snapshot)
    while True:
        time.sleep(5)

    doc_watch.unsubscribe()


def on_snapshot (doc_snapshot, changes, read_time):
    for change in changes:
        if change.type.name == 'ADDED':
            print(f'Document located: {change.document.id}')
        elif change.type.name == 'MODIFIED':
            doc_ref.update({u'NewImageRequested': False})
            print('\tNew image requested, uploading to storage')
            storage.child('images/ipcam/upload_test.png').put('non_local_networks.png')
            print('\tNew image uploaded')


if __name__ == '__main__':
    main()

到目前为止,这是可行的,但我有两个问题:

  1. 每次更改文档的任何部分时都会触发上载,而不仅仅是当“NewImageRequested”从False变为True时。是否可以只收听此特定字段

  2. 更好的是,只有当“NewImageRequested”从False变为True时,我才能触发上载吗?它现在的工作方式是:

    • “NewImageRequested”从False切换为True
    • 上传图像
    • “NewImageRequested”设置为False
    • 检测到另一个更改(真到假)
    • 再次上传图片
    • 由于“NewImageRequested”已为False,因此不会进行更新

如果我只能在假-真切换发生时触发上传和修改“NewImageRequested”,它将保存上传(没什么大不了的,但我想知道这是否可能)=


1条回答
网友
1楼 · 发布于 2024-04-20 07:26:08

Is it possible to listen to only this specific field?

Firebase侦听器在整个文档上触发,而不是在字段级更改上触发。您必须保留文档的上一个快照和新快照,并对它们进行比较,以确定发生了哪些更改

或者,您可以为“请求新图像”任务创建特定文档,将其写入特定子集合,并让客户端侦听该“任务队列”中的文档

相关问题 更多 >