【问题标题】:how to check if file exists in Firebase Storage?如何检查文件是否存在于 Firebase 存储中?
【发布时间】:2016-10-11 14:18:58
【问题描述】:

使用数据库时,您可以通过snapshot.exists() 来检查某些数据是否存在。根据文档,没有类似的存储方法。

https://firebase.google.com/docs/reference/js/firebase.storage.Reference

检查某个文件是否存在于 Firebase 存储中的正确方法是什么?

【问题讨论】:

    标签: javascript firebase firebase-storage


    【解决方案1】:

    我相信 FB 存储 API 的设置方式是用户只请求存在的文件。

    因此,必须将不存在的文件作为错误处理: https://firebase.google.com/docs/storage/web/handle-errors

    【讨论】:

      【解决方案2】:

      您可以使用getDownloadURL,它返回一个Promise,它又可以用来捕获“未找到”错误,或者处理文件(如果存在)。例如:

      storageRef.child("file.png").getDownloadURL().then(onResolve, onReject);
      
      function onResolve(foundURL) {
          //stuff
      }
      
      function onReject(error) {
          console.log(error.code);
      }
      

      【讨论】:

      • 警告:如果您有数千个文档,下载网址可能会很昂贵,因为下载网址将由 Firebase 定价。
      【解决方案3】:

      我找到了一个很好的解决方案,同时使用 File.exists 保留在 Node.js Firebase Gogole 云存储 SDK 中,告诉搜索者共享它是理想的选择。

      const admin = require("firebase-admin");
      const bucket = admin.storage().bucket('my-bucket');
      
      const storageFile = bucket.file('path/to/file.txt');
      storageFile
        .exists()
        .then(() => {
          console.log("File exists");
        })
        .catch(() => {
          console.log("File doesn't exist");
        });
      

      Google Cloud Storage: Node.js SDK version 5.1.1 (2020-06-19) 在撰写本文时

      【讨论】:

      【解决方案4】:

      Firebase 添加了一个 .exists() 方法。另一个人回应并提到了这一点,但他们提供的示例代码不正确。我自己在寻找解决方案时发现了这个线程,起初我很困惑,因为我尝试了他们的代码,但即使文件明显不存在,它也总是返回“文件存在”。

      exists() 返回一个包含布尔值的数组。使用它的正确方法是检查布尔值,如下所示:

      const storageFile = bucket.file('path/to/file.txt');
      storageFile
        .exists()
        .then((exists) => {
              if (exists[0]) {
                console.log("File exists");
              } else {
                console.log("File does not exist");
              }
           })
      

      我分享这个是为了让下一个找到这个帖子的人可以看到它并节省一些时间。

      【讨论】:

      • 谢谢。这种方法有谷歌文档吗?好像没找到。
      • @GrantSingleton 我自己也找不到任何官方文档。
      • @GrantSingleton 更正:有一个参考。如果您向下滚动,另一位海报在同一主题的进一步评论中分享了它。 googleapis.dev/nodejs/storage/5.1.1/File.html#exists-examples
      • 确保检查 exists[0] 而不是 exists。那是我的愤怒
      • @BrandonPillay 对我来说它来自:const fbAdmin = require('firebase-admin'); const bucketName = projectId + '.appspot.com'; const bucket = fbAdmin.storage().bucket(bucketName);
      【解决方案5】:

      这对我有用

        Future<bool> fileExists(String file) async {
          var parts = file.split('/');
          var path = parts.sublist(0, parts.length - 1).join('/');
          var listResult = await _storage.ref().child(path).list();
          return listResult.items.any((element) => element.fullPath == file);
        }
      

      【讨论】:

      • 一个好的答案将始终包括解释为什么这会解决问题,以便 OP 和任何未来的读者可以从中学习
      猜你喜欢
      • 2021-02-26
      • 1970-01-01
      • 2017-08-10
      • 2016-11-06
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多