颤动的FirebaseStorage

Posted

技术标签:

【中文标题】颤动的FirebaseStorage【英文标题】:FirebaseStorage with flutter 【发布时间】:2020-05-05 17:55:09 【问题描述】:

我是 firebase 新手,我无法弄清楚我应该将什么样的参数传递给 下面的代码,是否有任何教程或适当的文档为 firebase with flutter?

实现的代码

import "dart:io";
import "package:flutter/material.dart";
import "package:firebase_storage/firebase_storage.dart";
import "package:flutter/widgets.dart";

class uploadApp extends StatefulWidget
  @override
  State<StatefulWidget> createState() =>_uploadApp(); 


class _uploadApp extends State<uploadApp>

  var count=1;
  final File file = File("images/ts2.jpg");
  final FirebaseStorage _storage = FirebaseStorage(storageBucket:"gs://console.firebase.google.com/project/baby-name-4ef54/storage/baby-name-4ef54.appspot.com");
  StorageUploadTask _uploadTask;

  void firebasebackend()
    String filePath = "images/$count.jpg";
    setState(() 
      _uploadTask = _storage.ref().child(filePath).putFile(file);
    );
  

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title:"upload",
      home:Material(
        child:Container(child:Center(
          child:
           Column(
            children: <Widget>[
              Container(
                width: 300.0,
                height: 300.0,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.all(Radius.circular(300.0)),
                  image:DecorationImage(
                    image: AssetImage("images/ts2.jpg"),
                    fit: BoxFit.cover
                  )
                ),
              ),
              Center(
                child: RaisedButton(
                  child:Text("Upload"),
                  onPressed: ()
                    firebasebackend();
                    setState()
                  count=count+1;
                       ;     
                  ,
                ),
              )
            ],
          ),
        )
      )
      )
    );
  

'package:firebase_storage/src/storage_reference.dart':断言失败:第 62 行 pos 12:'file.existsSync()':不正确。

我应该怎么做才能将图像直接从文件夹上传到 Firebase 存储?

【问题讨论】:

【参考方案1】:

这可能看起来很微不足道,但彼得哈达德在他的帖子的 cmets 中指出

那可能是因为没有那个路径的图片...

这正是我遇到此错误的原因。 我的错误是,我假设在创建 File 对象并且使用不存在的路径创建此对象时会引发错误。 然而,这种情况并非如此。因此,确保验证 File 对象引用了正确的路径

【讨论】:

【参考方案2】:

从您收到的错误消息来看,您的手机上似乎没有File("images/ts2.jpg"); 的文件,这意味着SDK 找不到任何要上传到云存储的数据。

一般来说,我会怀疑您在这里使用的相对路径。 example that comes with the Firebase Storage SDK 使用final File file = await File('$systemTempDir.path/foo$uuid.txt').create(); 在临时目录中的绝对路径创建一个文件,我建议在文件系统上也使用绝对路径。

您需要通过浏览设备的文件系统或从图库或相机中获取绝对路径来找到要上传的图像的绝对路径。例如,如果您使用file picker,您可以通过以下方式获取文件:

File file = await FilePicker.getFile();

【讨论】:

我手机里的绝对路径?【参考方案3】:

根据firebase_storage插件的代码:

  /// Asynchronously uploads a file to the currently specified
  /// [StorageReference], with an optional [metadata].
  StorageUploadTask putFile(File file, [StorageMetadata metadata]) 
    assert(file.existsSync());
    final _StorageFileUploadTask task =
        _StorageFileUploadTask._(file, _firebaseStorage, this, metadata);
    task._start();
    return task;
  

file 作为参数,将StorageMetadata 类型的变量作为可选参数。

https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_storage/lib/src/storage_reference.dart#L61

https://api.dart.dev/stable/2.7.0/dart-io/File-class.html

【讨论】:

是的,但是我使用哪个/什么文件,比如我用于“child()”的 filePath 表示 firebaseStorage 中的文件路径,那么这个文件表示什么? 它是否表示要为给定地址创建的文件?,我给出的 jpg 文件本身在“filePath”中给出 您需要使用文件对象示例:File tempImage = await ImagePicker.pickImage(source: ImageSource.gallery); 如果您使用 image_picker 插件从图库中获取图像,则方法 pickImage 返回一个文件对象,您可以在 putFile 中使用该对象跨度> filepath 中添加将在存储控制台中的路径,例如路径可以是 child("images") 然后创建一个包含 jpg 的新文件对象图片并将其添加到putFile 我编辑了这个问题,它抛出了一个异常,如下所示

以上是关于颤动的FirebaseStorage的主要内容,如果未能解决你的问题,请参考以下文章

如何通过颤动中的设备位置获取颤动中的时区、语言和县 ID?

由于未能安装SDK而无法“颤动”,但颤动的医生运行正常

我想在颤动中用手电筒录制视频,任何人都知道颤动中的任何插件或方法

小部件对颤动的故障影响?

在颤动中强制纵向视图

5秒后closeWebView - 颤动