Flutter将图像上传到firebase存储然后将其写入firestore

Posted

技术标签:

【中文标题】Flutter将图像上传到firebase存储然后将其写入firestore【英文标题】:Flutter uploading image to firebase storage then write it on firestore 【发布时间】:2021-03-19 23:04:42 【问题描述】:

我正在制作一个程序,每当用户注册时,他们需要将图像上传到 firebase 存储,然后所有登录数据和图像 url 将在图像上传后立即写入 firestore,这是我的代码:

void signUp(String _email, String _password, File image) async 
  await _auth
      .createUserWithEmailAndPassword(email: _email, password: _password)
      .then((result) async
    await uploadImage(image).then((value) 
      _firestore.collection('users').doc(result.user.uid).set(
      'uid': result.user.uid,
      'email': result.user.email,
      'imageUrl' : value!=null?value:""
    );
    );

Future<String> uploadImage(File image) async
    String fileName = p.basename(image.path);
    Reference storageRef = _fstorage.ref().child('upload/$fileName');
    UploadTask uploadTask = storageRef.putFile(image);
    await uploadTask.whenComplete(()
      storageRef.getDownloadURL().then((imageUrl)  
        return imageUrl!=null?imageUrl:"";
        );
    );
  

问题是在firestore文档上写入的imageUrl的值总是空的,即使图像文件成功上传,任何建议都将不胜感激。谢谢

【问题讨论】:

您是否尝试在上传后打印这些值?是返回网址吗? 【参考方案1】:

函数uploadImage 实际上并没有向调用者返回任何内容。您现在的 return 语句只是从传递给 whenComplete 的匿名函数返回一个值。它没有被传播到***函数之外。在编写之前尝试打印value 的值以查看它实际包含的内容。

您似乎只想简单地awaitputFilegetDownloadURL 的结果依次获取URL,然后返回它。

  Future<String> uploadImage(File image) async
    String fileName = p.basename(image.path);
    Reference storageRef = _fstorage.ref().child('upload/$fileName');
    await storageRef.putFile(image);
    return await storageRef.getDownloadURL()
  

我还建议查看documentation。

【讨论】:

【参考方案2】:
Future<String> uploadItemImage(mFileImage) async 
    final Reference storageReference = 
       FirebaseStorage.instance.ref().child("Items");
  
    TaskSnapshot taskSnapshot = await 
      storageReference.child("product_$productId.jpg")
        .putFile(mFileImage);
    
    var downloadUrl = await taskSnapshot.ref.getDownloadURL();

    return downloadUrl;

【讨论】:

以上是关于Flutter将图像上传到firebase存储然后将其写入firestore的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 将图像上传到 Firebase 存储

Flutter web - 无法将图像上传到 Firebase 存储

如何使用 Flutter 将图像上传到 Firebase

无法使用 Flutter Mobile 上传到 Firebase 存储

如何在 Flutter 中等待文件上传到 Firebase 存储?

如何将图像从颤动的资产上传到firebase存储?