颤动的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的主要内容,如果未能解决你的问题,请参考以下文章