Как получить файл изображения по протоколу http.Многочастотный ответ от API-интерфейса flask?

#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)]
        ],
      ),
    );
  }
 

Я также пытался записать эти байты в файл, но возникает другая ошибка, в которой говорится, что файл пуст.