如何解决将用户上传的图像存储为Flutter Web中的实际.jpg文件
我正在使用flutter_web_image_picker程序包允许用户选择-然后将图像上传到Firebase-。
但是,程序包返回一个image widget
,我可以显示它,但不能将其上传到Firebase。因此,我正在尝试阅读程序包的代码并对其进行更新以满足我的需求。
通常,我认为这些软件包的主要功能是:
它获取文件
//...
final reader = html.FileReader();
reader.readAsDataUrl(input.files[0]);
await reader.onLoad.first;
final encoded = reader.result as String;
然后将其“剥离”
final stripped = encoded.replaceFirst(RegExp(r'data:image/[^;]+;base64,'),'');
final imageName = input.files?.first?.name;
//...
要最终将其作为小部件返回:
final imageName = imageName;
final imageData = base64.decode(stripped);
return Image.memory(imageData,semanticLabel: imageName);
正如我说的,它可以完美运行,但是,我需要使其适应我的需求:
我想以.jpg
文件的形式获取图像,以便将其上传到Firebase。
实际.jpg
文件上方是否有任何变量?我应该执行任何转换以获得.jpg
文件吗?
谢谢!
解决方法
我的回答基于this帖子。
基本上,在flutter_web_image_picker包中,在我发布代码之前,有几行可以获取实际的html文件:
final html.FileUploadInputElement input = html.FileUploadInputElement();
input..accept = 'image/*';
input.click();
await input.onChange.first;
if (input.files.isEmpty) return null;
然后使用firebase的pacakge,我将图像上传如下:
import 'package:firebase/firebase.dart' as fb;
fb.StorageReference storageRef = fb.storage().ref('myLocation/filename.jpg');
fb.UploadTaskSnapshot uploadTaskSnapshot = await storageRef.put(input.files[0]).future;
Uri imageUri = await uploadTaskSnapshot.ref.getDownloadURL();
return imageUri;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。