祝你愉快,
我正在实现一个功能,用户可以上传他们的图片到我的Flutter Web应用程序和应用程序显示它。
我试着把它做成下面的样子
1.当用户上传图像文件时,它会以字节的形式上传到Firebase Storage上(我知道图像文件本身不能通过Flutter WEB应用程序上传,必须转换为字节。真的吗?)
1.字节文件的下载URL存储在Firestore中。
1.我的应用会找到下载URL,并使用该URL显示图像文件(字节)(如果是)。
使用的方法是Image.network(downloadURL)
,但URL中的文件似乎必须是图像文件,否则会引发错误。
我想知道如何在Flutter WEB应用程序中显示从下载URL转换为字节的图像文件。
或者将图像文件本身上传到Flutter WEB应用程序中的Firebase Storage。
应用程序找到具有以下代码的下载URL
String? profileDownloadURL;
@override
initState() {
super.initState();
email = FirebaseAuth.instance.currentUser!.email;
getProfileURL();
}
getProfileURL() async {
DocumentSnapshot<Map<String, dynamic>> documentSnapshot =
await FirebaseFirestore.instance.collection('Users').doc(email).get();
setState(() {
profileDownloadURL = documentSnapshot.data()!['profileDownloadURL'];
});
print('profile: $profileDownloadURL');
}
用户可以使用以下方法选择图像文件
startWebFilePicker() async {
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
final email = FirebaseAuth.instance.currentUser!.email;
final storageRef = FirebaseStorage.instance.ref();
final profileRef = storageRef.child(email!).child(result.files.single.name);
try {
// upload a byte-converted image file to Firebase Storage
await profileRef.putData(result.files.single.bytes!);
// update download URL on Firestore
String downloadURL = await profileRef.getDownloadURL();
FirebaseFirestore.instance.collection('Users').doc(email).set(
{'profileDownloadURL': downloadURL},
SetOptions(merge: true),
);
} on FirebaseException catch (e) {
print('1: $e');
} catch (e) {
print('2: $e');
}
} else {
// User canceled the picker
}
}
应用程序显示如下图像
Container(
child: profileDownloadURL != null
? CircleAvatar(
radius: 100,
backgroundImage: Image.network(
profileDownloadURL!,
fit: BoxFit.fill,
).image,
)
: const CircleAvatar(
radius: 100,
child: Icon(
Icons.person,
),
),
),
3条答案
按热度按时间twh00eeo1#
xfb7svmp2#
尝试在
await imageRef .putFile(selectedImagePath, metadata)
中使用发送元数据contentType: "image/jpeg"
See result
查看要点上的完整示例-https://gist.github.com/akshaysinghhal/66e2ebaf61747040a76c62f826e8e8d1#file-upload_image-dart
au9on6nz3#
要将文件上载到云存储,首先创建对文件完整路径的引用,包括文件名。创建适当的引用后,然后调用putFile()、putString()或putData()方法将文件上载到云存储。
在此处可以找到带有进度监视和错误处理的上载的完整示例
此外,我建议您查看此线程Firebase Cloud Storage in Flutter。
下面是几个类似实现的示例:
另外,请查看这些公共博客,了解更多示例;非Google官方: