当前位置: 首页 > 知识库问答 >
问题:

Flutter-将图像上传到Firebase存储

夔高寒
2023-03-14

我从Firebase存储中获取图像,用相机拍照,或者从图书馆中挑选一张。当其中一个完成时,我有一个类来存储图像,以便在需要时使用它。

现在我需要将此图像上传到Firebase存储(修改或新建,无所谓)。Firebase允许我使用以下选项之一:putDataputFile,每个选项分别需要Uint8List文件

我怎么能把我的图像,并从它获得一个文件Uint8List用于上传?

--

或者,为了解决这个问题,当我从Firebase存储中检索图像时,如何获取图像的文件

无论哪种方式都可以提供正确的数据类型来上传图像,无论是在开始还是结束时都可以获得File

共有3个答案

年良骏
2023-03-14

很抱歉我的回答晚了,但是上面的答案有点旧,希望我的答案能帮助你。下面的代码示例将适用于以下依赖项。

关于这个问题,它说上传后如何检索。您可以使用下载URL获取文件或图像,您可以下载它,也可以在NetworkImage小部件上显示它以向用户显示。我已经在下面展示了如何获取下载URL。

公共规范。亚马尔

dependencies
    image_picker: ^0.6.5
    firebase_storage: ^3.1.5

飞镖代码

//Creating a global Variable    
StorageReference storageReference = FirebaseStorage.instance.ref();
File _image;

void getImage(){
    _image = await ImagePicker.pickImage(source: ImageSource.gallery); 
}

void addImageToFirebase(){


    //CreateRefernce to path.
    StorageReference ref = storageReference.child("yourstorageLocation/");

    //StorageUpload task is used to put the data you want in storage
    //Make sure to get the image first before calling this method otherwise _image will be null.

    StorageUploadTask storageUploadTask = ref.child("image1.jpg").putFile(_image);

     if (storageUploadTask.isSuccessful || storageUploadTask.isComplete) {
          final String url = await ref.getDownloadURL();
          print("The download URL is " + url);
     } else if (storageUploadTask.isInProgress) {

          storageUploadTask.events.listen((event) {
          double percentage = 100 *(event.snapshot.bytesTransferred.toDouble() 
                               / event.snapshot.totalByteCount.toDouble());  
          print("THe percentage " + percentage.toString());
          });

          StorageTaskSnapshot storageTaskSnapshot =await storageUploadTask.onComplete;
          downloadUrl1 = await storageTaskSnapshot.ref.getDownloadURL();

          //Here you can get the download URL when the task has been completed.
          print("Download URL " + downloadUrl1.toString());

     } else{
          //Catch any cases here that might come up like canceled, interrupted 
     }

}
吕承福
2023-03-14

要首先选择图像(画廊、照相机等),可以使用图像选择器软件包

然后像这样得到图像文件

//Get the file from the image picker and store it
final pickedFile = await picker.getImage(source: ImageSource.camera);

  File image;
  if (pickedFile != null) {
    image = File(pickedFile.path);
  } else {
    print('No image selected.');
    return;
  }

然后检测要保存此文件图像的引用

FirebaseStorage storage = FirebaseStorage.instance;
//Create a reference to the location you want to upload to in firebase
StorageReference reference = storage.ref().child("profileImages/myImageUid");

最后开始上传并等待完成,然后获取URL图像

//Upload the file to firebase
        StorageUploadTask uploadTask = reference.putFile(image);
    
        StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
    
        // Waits till the file is uploaded then stores the download url
        String url = await taskSnapshot.ref.getDownloadURL();
    

完整代码

FirebaseStorage storage = FirebaseStorage.instance;

    File image;
    try {
      //Get the file from the image picker and store it
      image = await ImagePicker.pickImage(source: ImageSource.gallery);

    } on PlatformException catch (e) {
      //PlatformException is thrown with code : this happen when user back with don't
      //selected image or not approve permission so stop method here 
      // check e.code to know what type is happen
      return;
    }

    //Create a reference to the location you want to upload to in firebase
    StorageReference reference =
        storage.ref().child("profileImages/${user.id}");

    //Upload the file to firebase
    StorageUploadTask uploadTask = reference.putFile(image);

    StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;

    // Waits till the file is uploaded then stores the download url
    String url = await taskSnapshot.ref.getDownloadURL();
辛承
2023-03-14

当您使用图像选择器选择图像时,它会返回一个文件,您可以使用wait等待用户选择一个文件,然后将其存储为文件。下面是一些示例代码,说明如何从图像选择器获取文件并将其上载到Firebase。

    FirebaseStorage _storage = FirebaseStorage.instance;

    Future<Uri> uploadPic() async {

    //Get the file from the image picker and store it 
    File image = await ImagePicker.pickImage(source: ImageSource.gallery);  

    //Create a reference to the location you want to upload to in firebase  
    StorageReference reference = _storage.ref().child("images/");

    //Upload the file to firebase 
    StorageUploadTask uploadTask = reference.putFile(file);

    // Waits till the file is uploaded then stores the download url 
    Uri location = (await uploadTask.future).downloadUrl;

    //returns the download url 
    return location;
   }
 类似资料:
  • 我试图上传一个图像文件,我得到了使用Imagepicker。 但上面的代码返回以下错误 VERBOSE-2:ui\u dart\u状态。cc(186)]未处理的异常:MissingPluginException(未找到方法任务的实现#通道插件上的startPutFile.flatter.io/firebase_存储)#0 MethodChannel_invokeMethod包:flatter/..

  • 问题内容: 我想将图像的下载URL放入Firebase数据库中。我可以将图像上传到存储中,但无法弄清楚如何将URL与其余的“帖子”一起放入数据库。 问题答案: 像这样组织您和func: 接下来,只需连接并保存到您的节点即可。 您也可以查看我有关上传数据并将URL保存到数据库的答案 希望能帮助到你

  • 我有一个问题与我的代码,我必须上传图像到Firebase存储,我需要的图像来自画廊和相机,从画廊的图像是好的,但来自相机的图像给问题,图像加载在ImageView和被发送到数据库是黑色的。有人知道如何解决这个问题吗,或者你知道任何其他加载图像的方法吗? 来自画廊 从相机

  • 我在SQLite数据库中有一个图像作为BLOB类型,我想将该图像上传到firebase存储中,获取图像的下载URL和尺寸,并将它们添加到Firebase实时数据库中。我已使用 bucket.upload 从本地驱动器成功上传了图像,但我不知道如何上传 blob。 我在服务器端(NodeJS)使用admin-sdk,有一个“上传”功能,但那是在客户端sdk中。

  • 我需要存储从照相机到gallery再到firebase的图像。在我的项目上传从画廊工作,但当我试图从相机上传什么都没有发生。当您在“多媒体资料”或“照相机”之间选择“单击”按钮时。当从“多媒体资料”中拍照或选择“图像”时,在“图像视图”中我可以获得图像。然后我点击save,若图片来自gallery,则保存到存储器,并在数据库中创建子对象,但若图片来自camera,则无法工作。这个问题有解决办法吗?

  • 我想将相机拍摄的图像上传到firebase存储。我知道如何存储图像,一旦我得到图像的Uri格式,但我从相机活动得到位图。所以我需要知道怎么做? 我使用函数uploadFile()将图像的Uri存储到firebase存储,然后获取图像的url以将其存储在firebase实时数据库中。但是我需要将位图转换为Uri吗?如果是,如何进行?我发现的代码不起作用,如果有其他方法,请告诉我 谢谢您的时间:)