无法将 Storage Firebase 映像正确链接到 Cloud Firestore

Posted

技术标签:

【中文标题】无法将 Storage Firebase 映像正确链接到 Cloud Firestore【英文标题】:Can't Link Storage Firebase images, to Cloud Firestore correctly 【发布时间】:2021-03-04 01:57:04 【问题描述】:

我不明白为什么我无法链接并将 URL 发送到 Cloud Firestore 集合文档 图像在存储中正确拾取,但无法在 cloud firestore db 中获取 URL 这是我的代码:


  bool isLoading = false;
  var firebaseUser =  FirebaseAuth.instance.currentUser;


  Future uploadImage(BuildContext context) async 
    String fileName = basename(_imageFile.path);
    Reference firebaseStorageRef =
    FirebaseStorage.instance.ref().child('uploads/$fileName');
    UploadTask uploadTask = firebaseStorageRef.putFile(_imageFile);
    TaskSnapshot taskSnapshot = await uploadTask.whenComplete(() => null);
    if (taskSnapshot == null) 
      final String downloadUrl =
      await taskSnapshot.ref.getDownloadURL();
      await FirebaseFirestore.instance.doc(firebaseUser.uid)
          .collection("influncerUser")
          .add("imageUrl": downloadUrl,);
      setState(() 
        isLoading = true;
      );
    
  

【问题讨论】:

【参考方案1】:

首先,为什么要使用 if (taskSnapshot == null) ?如果 taskSnapshot 为 null 则无法获取下载 url,所以删除它。

其次,更喜欢使用onComplete 而不是 .whenComplete(() => null)

Future uploadImage(BuildContext context) async 
String fileName = basename(_imageFile.path);
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('uploads/$fileName');
UploadTask uploadTask = firebaseStorageRef.putFile(_imageFile);

// use onComplete to await when the doc has been pushed.
TaskSnapshot taskSnapshot = await uploadTask.onComplete;

final String downloadUrl = await taskSnapshot.ref.getDownloadURL();
await FirebaseFirestore.instance.doc(firebaseUser.uid)
    .collection("influncerUser")
    .add("imageUrl": downloadUrl,);
setState(() => isLoading = true);

【讨论】:

onComplete 似乎已被弃用,我在下面有一条红线,唯一可用的选项是 whenComplete。 这两种方式都不会将URL添加到cloud firestore中的集合中。我也收到了这个错误:断言失败:第 129 行 pos 12:'isValidDocumentPath(documentPath)':文档路径必须指向有效文档。 我不知道 onComplete 已被弃用。用户的路径似乎不正确,用户文档是存储在集合中还是存储在 Firestore 的根目录中? E/flutter (3791): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 未处理异常:'package:cloud_firestore/src/firestore.dart':断言失败:行129 pos 12:'isValidDocumentPath(documentPath)':文档路径必须指向有效文档。 E/flutter (3791): #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39) E/flutter (3791): #1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart: 36:5) E/flutter (3791): #2 FirebaseFirestore.doc (package:cloud_firestore/src/firestore.dart:129:12) 我在完成时删除了我保持原样:TaskSnapshot taskSnapshot = await uploadTask;但还是什么都没有

以上是关于无法将 Storage Firebase 映像正确链接到 Cloud Firestore的主要内容,如果未能解决你的问题,请参考以下文章

firebase.storage() 不是 JavaScript 中的函数

无法将 Firebase Cloud Storage Function 范围限定为本地模拟器上的特定存储桶

无法从 firebase/storage 导入 getStorage 以与 React Native Expo 图像选择器一起使用

Firebase Storage Web:如何上传文件

Firebase Cloud Storage Java Admin SDK 使用 contentType 上传文件

错误:“无法实例化 firebase-storage - 请务必先加载 firebase-app.js”