如何解决上传从 Flutter web 中选取的图片到 firebase 存储和 Firestore
我能够使用代码从 flutter web 中获取图像:
Uint8List uploadedImage;
_startFilePicker() async {
InputElement uploadInput = FileUploadInputElement();
uploadInput.click();
uploadInput.onChange.listen((e) {
// read file content as dataURL
final files = uploadInput.files;
if (files.length == 1) {
final file = files[0];
FileReader reader = FileReader();
reader.onLoadEnd.listen((e) {
setState(() {
uploadedImage = reader.result;
});
});
reader.onError.listen((fileEvent) {
setState(() {
Text( "Some Error occured while reading the file");
});
});
reader.readAsArrayBuffer(file);
}
});
}
Widget uploadImage() {
return Container(
width: 530,child: Row(
mainAxisAlignment: MainAxisAlignment.center,children: [
uploadedImage == null ? CircleAvatar(
radius: 60,backgroundColor: Colors.grey[100],backgroundImage: AssetImage('assets/images/profileavatar.png'),):
CircleAvatar(
radius: 65,backgroundImage: AssetImage('assets/images/backgroundslide.gif'),child: CircleAvatar(
radius: 60,backgroundImage: MemoryImage(uploadedImage),),SizedBox(
width: 20,uploadedImage == null ? RaisedButton(
color: Colors.orange,onPressed: () {
_startFilePicker();
},child: Text(
'Aggiungi un immagine profilo',style: TextStyle(color: Colors.white,fontSize: 12),): RaisedButton(
color: Colors.orange,child: Text(
'Modifica immagine profilo',],);
}
这样我就成功地从桌面上获得了图像。 现在我需要将此图像上传到 flutter 中的存储并进入 Firestore 中的 Collection:
var firebaseUser = FirebaseAuth.instance.currentUser;
Future<Uri> uploadImageFile(html.File uploadedImage,{String imageName}) async {
fb.StorageReference storageRef = fb.storage().ref('images/$imageName');
fb.UploadTaskSnapshot uploadTaskSnapshot = await storageRef.put(uploadedImage).future;
await FirebaseFirestore.instance.collection('ifUser').doc(firebaseUser.uid)
.update({"avatarImage": uploadImageFile(uploadedImage),});
Uri imageUri = await uploadTaskSnapshot.ref.getDownloadURL();
return imageUri;
}
当我调用函数 uploadImageFile(uploadedImage);
我收到错误:
不能将参数类型“Uint8List”分配给参数类型“文件”。 这是正确的方法吗?
解决方法
从错误看来,上传需要一个文件,而您正在传递 Uint8List。
您可以在将数据上传到存储之前尝试使用 this 对其进行转换。
File.fromRawPath(Uint8List uint8List);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。