#flutter #http #bytesio #bytestream
Вопрос:
Я написал API-интерфейс flask, который назначает изображение, выполняет некоторую операцию, а затем возвращает изображение обратно в приложение flutter. Вот мой код, который возвращает изображение с сервера:
@app.route("/", methods=["POST", "GET"])
def home():
if request.method == "POST":
imagefile = request.files.get("image", "")
image = performSomeOperation(imagefile)
return send_file(image, mimetype="image/gif")
Вот составной http-запрос, который отправляет изображение в api, и изображение правильно получено на сервере. Но когда сервер возвращает изображение, я не могу вернуть его на flutter. Вот код
http.MultipartRequest request =
http.MultipartRequest('POST', Uri.parse('http://192.168.8.111:5000/'));
request.files.add(
await http.MultipartFile.fromPath(
'image',
File(widget.imagePath).path,
contentType: MediaType('application', 'jpeg'),
),
);
http.StreamedResponse r = await request.send();
var response = await http.Response.fromStream(r);
Directory appDocDirectory = await getApplicationDocumentsDirectory();
myfile = new File((appDocDirectory.path) "/abc12345");
if (myfile.existsSync()) myfile.deleteSync();
var ios = myfile.openWrite(mode: FileMode.write);
bytes = response.bodyBytes;
ios.add(bytes);
ios.close();
setState(() {
this.a = 1;
});
Я пытаюсь преобразовать байт в изображения, чтобы показать его в своем приложении, но появляется ошибка
При разрешении кодека изображения было вызвано следующее исключение _Exception: Исключение: Недопустимые данные изображения
Вот мой метод сборки:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Display the Picture')),
// The image is stored as a file on the device. Use the `Image.file`
// constructor with the given path to display the image.
body: Column(
children: [
Image.file(File(widget.imagePath)),
ElevatedButton(
onPressed: () {
myFunc(context);
},
child: Text("Recognize"),
),
if (a != 0) ...[Image.memory(bytes)]
],
),
);
}
Я также пытался записать эти байты в файл, но возникает другая ошибка, в которой говорится, что файл пуст.