如何检查 Firebase 存储中是否存在文件?

how to check if file exists in Firebase Storage?

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

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

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

我认为 FB 存储 API 的设置方式是用户仅请求存在的文件。

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

您可以使用 getDownloadURL which returns a Promise,后者又可用于捕获 "not found" 错误,或处理文件(如果存在)。例如:

storageRef.child("file.png").getDownloadURL().then(onResolve, onReject);

function onResolve(foundURL) {
    //stuff
}

function onReject(error) {
    console.log(error.code);
}

我找到了一个很好的解决方案,同时使用 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) 在撰写本文时

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

exists() returns 一个包含布尔值的数组。正确的使用方法是检查布尔值,像这样:

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");
        }
     })

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

对我有用

  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);
  }