Saltar al contenido

¿Cómo enviar una imagen a una API en dart/flutter?

Contamos con tu ayuda para difundir nuestros posts referente a las ciencias de la computación.

Solución:

El método más simple sería publicar una solicitud de varias partes como en esta publicación y luego publicarla en el servidor.

Asegúrese de importarlos al principio del archivo:

import 'package:path/path.dart';
import 'package:async/async.dart';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'dart:convert';

Agregue esta clase en algún lugar de su código:

upload(File imageFile) async     
      // open a bytestream
      var stream = new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
      // get file length
      var length = await imageFile.length();

      // string to uri
      var uri = Uri.parse("http://ip:8082/composer/predict");

      // create multipart request
      var request = new http.MultipartRequest("POST", uri);

      // multipart that takes file
      var multipartFile = new http.MultipartFile('file', stream, length,
          filename: basename(imageFile.path));

      // add file to multipart
      request.files.add(multipartFile);

      // send
      var response = await request.send();
      print(response.statusCode);

      // listen for response
      response.stream.transform(utf8.decoder).listen((value) 
        print(value);
      );
    

Luego sube usando:

upload(File(filePath));

En tu código:

void onTakePictureButtonPressed() 
    takePicture().then((String filePath) 
      if (mounted) 
        setState(() 
          imagePath = filePath;
          videoController?.dispose();
          videoController = null;
        );

       // initiate file upload
       Upload(File(filePath));

        if (filePath != null) showInSnackBar('Picture saved to $filePath');
      
    );
  

 import 'package:dio/dio.dart'; //From 3.x.x version

    uploadImage()
        var formData = FormData();
        formData.files.add(MapEntry("Picture", await MultipartFile.fromFile(data.foto.path, filename: "pic-name.png"), ));
        var response = await dio.client.post('v1/post', data: formdata);
    

Si está enviando la imagen al servidor PHP Laravel. Prueba a reducir la size of the image mientras lo envía al servidor. Usé el paquete Image Picker para reducir el tamaño de la imagen.

var image = await ImagePicker.pickImage(source: imageSource, imageQuality: 50, maxHeight: 500.0, maxWidth: 500.0);

Luego cree un archivo de varias partes con esa imagen, agréguelo a los datos del formulario y envíe los datos del formulario al servidor mediante la solicitud posterior con dio biblioteca. Ver @Elialber Lopes respuesta para el envío de los datos.

Funcionó para mí.

Si para ti ha sido de utilidad este artículo, sería de mucha ayuda si lo compartes con más desarrolladores y nos ayudes a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *