我正在编写Flutter代码,在Image小部件中放置了图像,并希望将其转换为文件,以便可以将其上传到Firebase存储。
Image _image = Image.asset('assets\images\profile.png');
File _fileImage = convertToFile(_image);
//upload _fileImage to Firebase Storage code
我需要
File convertToFile(Image img)
函数。我正在编写Flutter代码,在Image小部件中放置了图像,并希望将其转换为文件,以便可以将其上传到Firebase存储。
Image _image = Image.asset('assets\images\profile.png');
File _fileImage = convertToFile(_image);
//upload _fileImage to Firebase Storage code
File convertToFile(Image img)
函数。特别感谢sami kanafani。
这是我的解决方案(对我来说完美地工作):
import 'dart:async';
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
class ImageUtils {
static Future<File> imageToFile({String imageName, String ext}) async {
var bytes = await rootBundle.load('assets/$imageName.$ext');
String tempPath = (await getTemporaryDirectory()).path;
File file = File('$tempPath/profile.png');
await file.writeAsBytes(
bytes.buffer.asUint8List(bytes.offsetInBytes, bytes.lengthInBytes));
return file;
}
}
class AnotherClass {
File imagePlaceHolder;
_setPlaceHolder() async {
this.imagePlaceHolder = await ImageUtils.imageToFile(
imageName: "photo_placeholder", ext: "jpg");
}
...
Image.file(this.imagePlaceHolder),
}
File file = File('$tempPath/profile.png');
await file.writeAsBytes(
bytes.buffer.asUint8List(bytes.offsetInBytes, bytes.lengthInBytes));```
- Javier Heisecke(await getTemporaryDirectory()).path
只是获取应用程序内临时路径目录,File
创建一个空文件,file.writeAsBytes
只是获取之前提供的数据字节并将其保存在空文件中。 - undefinedimport 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'dart:math';
而这个函数:
Future<File> urlToFile(String imageUrl) async {
// generate random number.
var rng = new Random();
// get temporary directory of device.
Directory tempDir = await getTemporaryDirectory();
// get temporary path from temporary directory.
String tempPath = tempDir.path;
// create a new file in temporary path with random file name.
File file = new File('$tempPath'+ (rng.nextInt(100)).toString() +'.png');
// call http.get method and pass imageUrl into it to get response.
http.Response response = await http.get(imageUrl);
// write bodyBytes received in response to file.
await file.writeAsBytes(response.bodyBytes);
// now return the file which is created with random name in
// temporary directory and image bytes from response is written to // that file.
return file;
}
你需要转换资产而不是图像
你需要安装path_provider插件
var bytes = await rootBundle.load('assets\images\profile.png');
String tempPath = (await getTemporaryDirectory()).path;
File file = File('$tempPath/profile.png');
await file.writeAsBytes(bytes.buffer.asUint8List(bytes.offsetInBytes, bytes.lengthInBytes));
return file;