Firebase存储是否支持捆绑上传?

时间:2016-08-31 13:02:21

标签: javascript firebase firebase-storage

考虑到Firebase存储只是一个文件存储CDN,并且没有任何图像特殊功能(IE:缩略图生成),我们需要在客户端生成这些功能。

我遇到的问题是我们最终会遇到孤立的文件,因为用户会准备上传图片,并且考虑到我们必须单独上传原始图片和缩略图,用户可以取消上传或退出申请。

如果其中一个图像已经上传,而另一个图像没有上传,那么就会有一个孤立的文件存放在存储中,而这个文件并没有在任何地方使用,而最糟糕的部分是它永远不会被使用。

好的,所以如果用户手动取消上传,我们可以检查第一次上传是否成功以及是否发起了删除请求。没什么大不了的,但是如果申请退出,我们无能为力。

我希望有一种方法,或者至少很快就会以“全部成功或全部失败”的方式上传一批文件,类似于Firebase数据库中的事务。

如何解决这个问题?我只需要处理孤立的文件..?有没有办法轻松删除Firebase存储中的孤立图像,而无需下载所有用户,生成链接集,然后将链接下载到Firebase存储上的所有文件,检查链接,然后初始化删除请求?似乎是一项非常繁重的任务。

1 个答案:

答案 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
  })

完整的工作流程详情:

  1. 在数据库中创建用户,complete字段为false
  2. 之后启动所有其他操作,例如上传图片,创建缩略图等(此时无需存储您在数据库中不需要的任何内容,例如链接)
  3. 仅在complete字段更新为true之后之后

    关于用户界面:仅显示complete字段设置为true的用户,以避免显示损坏

    结果:如果在步骤3之前发生任何崩溃 - 因任何原因,则用户字段complete将保留在false