是否可以使用 Firebase 存储将多个图像添加到 Firebase 数据库? - 颤振

Posted

技术标签:

【中文标题】是否可以使用 Firebase 存储将多个图像添加到 Firebase 数据库? - 颤振【英文标题】:Is it possible to add multiple images to Firebase Database with Firebase Storage? - Flutter 【发布时间】:2021-12-09 03:53:44 【问题描述】:

在我的 Flutter 应用程序中,我希望用户将数据和图像上传到 Firebase 数据库,我已经成功地做到了。问题是,当我上传多张图片时,Firebase 存储中的一个 URL 被提供给数据库集合,但没有其他图片。有没有办法在一个集合中获取所有图像 URL?

我用于发送数据的 Flutter 代码:

var title = '';
var pageNo = 0;
var description = '';
var imgUrl;

Future sendData() async 
//Add the TextFormField data to the database
hwFormData
    .add(
      'title': title,
      'pageNo': pageNo,
      'description': description,
      'imgUrl': _uploadedFileUrl
    )
    .then((value) => print('Form data sent'))
    .catchError((error) => print('Failed to send data: $error'));
 _key.currentState!.reset();

//Send Images
firebase_storage.Reference ref;
for (var img in _image) 
  ref = firebase_storage.FirebaseStorage.instance
      .ref()
      .child('hwImages/$Path.basename(img.path)');
  await ref.putFile(img).whenComplete(() async 
    await ref.getDownloadURL().then((value) 
      hwFormData.add('imgUrl': value);
      setState(() 
        _uploadedFileUrl = value;
        imgUrl = value;
      );
    );
  );
 

【问题讨论】:

【参考方案1】:

已找到解决方案。必须将 imgUrl 更改为 List 值,然后在 for 循环中让 imgUrl 添加该值。

新代码:

//TextFormField data
var title = '';
var pageNo = 0;
var description = '';
List<String> imgUrl = [];

Future sendData() async 
//Send Images
firebase_storage.Reference ref;
for (var img in _image) 
  ref = firebase_storage.FirebaseStorage.instance
      .ref()
      .child('hwImages/$Path.basename(img.path)');
  await ref.putFile(img).whenComplete(() async 
    await ref.getDownloadURL().then((value) 
      hwFormData.add('imgUrl': value);
      imgUrl.add(value);
    );
  );


//Add the TextFormField data to the database
hwFormData
    .add(
      'title': title,
      'pageNo': pageNo,
      'description': description,
      'imgUrl': imgUrl
    )
    .then((value) => print('Form data sent'))
    .catchError((error) => print('Failed to send data: $error'));
//Resets the form data to null after it has been sent to the database
_key.currentState!.reset();

【讨论】:

以上是关于是否可以使用 Firebase 存储将多个图像添加到 Firebase 数据库? - 颤振的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个图像上传到 Firebase 存储并返回多个下载 URL

如何使用 Firebase 云存储添加图像存储功能?

如何将多个图像上传到Firebase存储并返回多个downloadURL

在上传到 Firebase 存储之前,您是不是必须知道图像文件类型?

将多个图像的异步图像上传到firebase存储

如何将图像上传到 Firebase 存储并将其添加到数据库中?