uploadFrontDPI function

Future<DPIProcessResponse> uploadFrontDPI({
  1. required File file,
  2. required String code,
})

Implementation

Future<DPIProcessResponse> uploadFrontDPI(
    {required File file, required String code}) async {
  var request = http.MultipartRequest(
    'POST',
    Uri.parse('${Enviroment.url}dpi/api/validateFrontDPIAWS'),
  );

  final fileBytes = await file.readAsBytes();

  // Detectar el tipo MIME del archivo (esto depende de la extensión)
  String mimeType = 'application/octet-stream'; // Tipo genérico por defecto
  if (file.path.endsWith('.jpg') || file.path.endsWith('.jpeg')) {
    mimeType = 'image/jpeg';
  } else if (file.path.endsWith('.png')) {
    mimeType = 'image/png';
  } else if (file.path.endsWith('.pdf')) {
    mimeType = 'application/pdf';
  }

  // Añadir el archivo a la solicitud con el tipo MIME adecuado
  request.files.add(
    http.MultipartFile(
      'file',
      Stream.value(
          fileBytes), // Usamos Stream.value para enviar los bytes correctamente
      fileBytes.length,
      filename: basename(file.path),
      contentType: MediaType.parse(mimeType), // Especificamos el tipo MIME
    ),
  );
  // Añadir otros campos a la solicitud
  request.fields['codigo'] = code;
  try {
    final streamedResponse = await request.send();
    final response = await http.Response.fromStream(streamedResponse);
    final Map<String, dynamic> responseData = jsonDecode(response.body);
    print("Response: ${responseData}");
    return DPIProcessResponse.fromJson(responseData);
  } catch (e) {
    DPIProcessResponse initProcessResponse = DPIProcessResponse(
        error: true, message: "Error interno en el sistema.", details: []);
    return initProcessResponse;
  }
}