我需要检查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()
到目前为止,这是可行的,但我有两个问题:
每次更改文档的任何部分时都会触发上载,而不仅仅是当“NewImageRequested”从False变为True时。是否可以只收听此特定字段
更好的是,只有当“NewImageRequested”从False变为True时,我才能触发上载吗?它现在的工作方式是:
如果我只能在假-真切换发生时触发上传和修改“NewImageRequested”,它将保存上传(没什么大不了的,但我想知道这是否可能)=
Firebase侦听器在整个文档上触发,而不是在字段级更改上触发。您必须保留文档的上一个快照和新快照,并对它们进行比较,以确定发生了哪些更改
或者,您可以为“请求新图像”任务创建特定文档,将其写入特定子集合,并让客户端侦听该“任务队列”中的文档
相关问题 更多 >
编程相关推荐