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

Posted

技术标签:

【中文标题】如何将图像从颤动的资产上传到firebase存储?【英文标题】:How to upload image from assets in flutter to firebase storage? 【发布时间】:2020-09-26 22:19:38 【问题描述】:

我正在使用以下代码从图库中选择图像以在 Flutter 应用程序中上传到 Firebase 存储,但我希望如果用户不选择图像,则应将资产中的默认图像上传到 Firebase 存储。我应该为要从资产中选择的图像编写什么代码,并将其设置为等于File avatarImageFile,以便可以将其上传到 Flutter 应用程序中的 Firebase 存储

File avatarImageFile;
    Future getImage() async 
        File image = await ImagePicker.pickImage(source: ImageSource.gallery);

        if (image != null) 
          setState(() 
            avatarImageFile = image;
            isLoading = true;
          );
        

        uploadFile();
      

【问题讨论】:

【参考方案1】:

您可以将资产图片转换为文件,然后上传到 Firebase! 这是要转换的代码:

import 'dart:async';
import 'dart:io';

import 'package:flutter/services.dart' show rootBundle;
import 'package:path_provider/path_provider.dart';

Future<File> getImageFileFromAssets(String path) async 
  final byteData = await rootBundle.load('assets/$path');

  final file = File('$(await getTemporaryDirectory()).path/$path');
  await file.writeAsBytes(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));

  return file;

在你的例子中,你会这样调用这个函数:

File f = await getImageFileFromAssets('images/myImage.jpg');

并编辑您的代码:

File avatarImageFile;

    Future getImage() async 
        File f = await getImageFileFromAssets('path of your asset Image');
        File image = await ImagePicker.pickImage(source: ImageSource.gallery);


      if (image != null) 
        setState(() 
          avatarImageFile = image;
          isLoading = true;
        );
      else
        avatarImageFile = f;
        isLoading = true;
      

        uploadFile();
      

【讨论】:

以上是关于如何将图像从颤动的资产上传到firebase存储?的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 存储中快速上传人物图像

如何从 Firebase 存储中下载图像并将其存储在颤动的列表中 [关闭]

如何从输入字段将图像上传到 Firebase 云存储?

如何在颤动中将资产图像存储在缓存中

如何将图像从前端(reactjs)传递到后端(nodejs)并将其上传到firebase存储?

Flutter - 将图像上传到 Firebase 存储