考虑到Firebase存储只是一个文件存储CDN,并且没有任何图像特殊功能(IE:缩略图生成),我们需要在客户端生成这些功能。
我遇到的问题是我们最终会遇到孤立的文件,因为用户会准备上传图片,并且考虑到我们必须单独上传原始图片和缩略图,用户可以取消上传或退出申请。
如果其中一个图像已经上传,而另一个图像没有上传,那么就会有一个孤立的文件存放在存储中,而这个文件并没有在任何地方使用,而最糟糕的部分是它永远不会被使用。
好的,所以如果用户手动取消上传,我们可以检查第一次上传是否成功以及是否发起了删除请求。没什么大不了的,但是如果申请退出,我们无能为力。
我希望有一种方法,或者至少很快就会以“全部成功或全部失败”的方式上传一批文件,类似于Firebase数据库中的事务。
如何解决这个问题?我只需要处理孤立的文件..?有没有办法轻松删除Firebase存储中的孤立图像,而无需下载所有用户,生成链接集,然后将链接下载到Firebase存储上的所有文件,检查链接,然后初始化删除请求?似乎是一项非常繁重的任务。
答案 0 :(得分:0)
您可以做的是在数据库中一切正常时在complete
中设置user
标记,并保持此字段编入索引。如果在所有任务完成之前出现任何问题(堕胎,退出,崩溃......),则不会设置该字段。
然后,基本管家脚本只会检查用户输入此标志为false
的条目:
firebaseRef.child('users')
.orderByChild('complete')
.equalTo(false)
.once('value')
.then(ref => {
// ref.val() -> contains all invalid users, check only them, fix/delete stuff, etc
});
此外,您不必启动文件下载来检查其存在,您可以使用getDownloadUrl()
方法:
storageRef.child("file.png").getDownloadURL()
.then(() => {
// The file exists
})
.catch(() => {
// The file does not exists
})
完整的工作流程详情:
complete
字段为false
complete
字段更新为true
之后之后
醇>
关于用户界面:仅显示complete
字段设置为true
的用户,以避免显示损坏
结果:如果在步骤3之前发生任何崩溃 - 因任何原因,则用户字段complete
将保留在false
。