1

使用 Firebase 支持的 CMS Flamelink,CMS 提供了一定的 Firestore 和 Storage 结构。图像存储在 Storage 中,对它的引用存储在 Firestore 中。Firestore 确实为我提供了对存储中资产的 DocumentReference。但我不知道如何从 DocumentReference 中获取 DownloadUrl。我可以从 DocumentReference 中检索文件名,但不能从 Storage 中检索完整路径。完整路径将允许我创建一个 StorageReference,它可以访问 getDownloadUrl()。

因此,作为一种解决方法,我目前正在将文件名与我在存储中查找的存储前缀连接起来。但是必须有更好的方法从 DocumentReference 中检索 DownloadUrl。否则,在我看来,它并不是真正的 DocumentReference。从 DocumentReference 获取 DownloadUrl 的正确方法是什么?

getNewImage(DocumentReference imgRef) async {
    DocumentSnapshot imgSnapshot = await imgRef.get();
    final imageName = imgSnapshot.data['file'];

    // How to get path dynamically?
    String storagePath = 'flamelink/media/$imageName';

    StorageReference storageReference = await DataProvider.getStore();
    StorageReference ref = storageReference.child(storagePath);
    String dlurl = await ref.getDownloadURL();

    setState(() {
        _imageUrl = dlurl;
    });
}

我将 Flutter 1.7.8 与 cloud_firestore 0.12.8 和 firebase_storage 3.0.3 一起使用。

4

1 回答 1

3

我通过添加populateget 方法解决了这个问题。

const app = flamelink({
  firebaseApp
});

const res = await app.content.get({ 
  schemaKey: 'schemaName', 
  populate:[{ field: 'image'}]
}).then( ... )

然后图像对象包含url具有绝对路径的属性,您不需要 getNewImage() 函数。

于 2019-09-30T12:58:38.720 回答