es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo enviar un archivo binario utilizando el enfoque HttpClient.

Estoy tratando de enviar dos archivos binarios a una de las REST API. Sin embargo, obtengo una respuesta de error de solicitud 400 del punto final.

Necesito enviar la siguiente clave y valores al punto final.

userForm – user.xml
structureForm – structure.xdp

A continuación se muestra el código en Java, [CÓDIGO ACTUALIZADO]

HttpPost request = new HttpPost(url);

Archivo userForm = new Archivo(“D:\Descargas\user.xml”);
LOG.info(“longitud —->” + userForm.length()); // Ver el tamaño de archivo válido
HttpEntity userFormEntity = MultipartEntityBuilder.create()
.addPart(“userForm”, new FileBody(userForm))
.build();

Archivo structureFile = new Archivo(“D:\Descargas\structure.xdp”);
LOG.info(“longitud structureFile —->” + structureFile.length()); // Ver el tamaño de archivo válido
HttpEntity structureEntity = MultipartEntityBuilder.create()
.addPart(“structureForm”, new FileBody(structureFile))
.build();

if (userFormEntity != null && structureEntity != null) {
request.setEntity(userFormEntity);
request.setEntity(structureEntity);

}

final CloseableHttpClient httpClient = HttpClientBuilder.create().build();

CloseableHttpResponse response = httpClient.execute(request);

Parece que las claves ‘userForm’ y ‘structureForm’ no se están enviando correctamente al punto final. ¿Es la forma correcta de enviar la clave?

Funciona cuando intento enviarlo a través de postman de la siguiente manera:
Aquí hay una captura de pantalla

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código Java dado es que tanto userFormEntity como structureEntity están siendo establecidos como la entidad de la solicitud mediante el método setEntity, lo cual significa que sólo se enviará la última entidad establecida con la solicitud. Por eso sólo se está recibiendo la clave structureForm en el endpoint.

    Para enviar ambos archivos, necesitamos crear un único MultipartEntityBuilder y agregar ambos archivos como partes con sus respectivas claves. Luego, establecer esta entidad como la entidad de la solicitud mediante el método setEntity.

    Aquí está el código actualizado:

    HttpPost request = new HttpPost(url);
    
    File userForm = new File("D:\\Downloads\\user.xml");
    LOG.info("length ---->" + userForm.length()); // Verificar tamaño válido del archivo
    FileBody userFormBody = new FileBody(userForm, ContentType.APPLICATION_XML);
    
    File structureFile = new File("D:\\Downloads\\structure.xdp");
    LOG.info("length structureFile ---->" + structureFile.length()); // Verificar tamaño válido del archivo
    FileBody structureFormBody = new FileBody(structureFile, ContentType.APPLICATION_OCTET_STREAM);
    
    HttpEntity entity = MultipartEntityBuilder.create()
        .addPart("userForm", userFormBody)
        .addPart("structureForm", structureFormBody)
        .build();
    
    request.setEntity(entity);
    
    final CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    
    CloseableHttpResponse response = httpClient.execute(request);
    

    En este código actualizado, creamos un MultipartEntityBuilder y agregamos ambos archivos como partes con sus respectivas claves. También establecemos explícitamente el ContentType para cada archivo. Finalmente, establecemos la entidad creada por el builder como la entidad de la solicitud mediante el método setEntity.

Comments are closed.