无法从 Flutter Firebase 中的 DocumentReference 获取 DownloadURL 或 StorageReference

Posted

技术标签:

【中文标题】无法从 Flutter Firebase 中的 DocumentReference 获取 DownloadURL 或 StorageReference【英文标题】:Cannot get DownloadURL or StorageReference from DocumentReference in Flutter Firebase 【发布时间】:2019-12-14 00:36:43 【问题描述】:

使用 Firebase 支持的 CMS Flamelink,CMS 提供了一定的 Firestore 和存储结构。图像存储在 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。

【问题讨论】:

【参考方案1】:

我通过添加populate 来解决这个问题。

const app = flamelink(
  firebaseApp
);

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

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

【讨论】:

以上是关于无法从 Flutter Firebase 中的 DocumentReference 获取 DownloadURL 或 StorageReference的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Flutter Firebase 中的 DocumentReference 获取 DownloadURL 或 StorageReference

带有 Firebase 托管的 Flutter web 无法从存储中加载图片

如何从 Flutter 中的 Firebase 实时数据库中按 categoryId 获取产品?

Firebase Documentsnapshot 映射到 Flutter 中的 Json 对象

Firebase/Flutter - 无法将数据写入数据库

如何从 Flutter 中的 Firebase 的 UID 获取任何用户的电子邮件? [复制]