Debo invocar una API POST REST que acepta un archivo en su cuerpo.

Si envío un archivo de algunos KB (usando el código a continuación) tarda unos 300 ms. Y, si envío alrededor de 5 GB de archivo, arroja la excepción de memoria insuficiente.

¿Hay alguna manera posible de enviar el archivo como Chunks, secuencialmente? Estamos evitando cualquier procesamiento paralelo, en este momento.

Cualquier ayuda en código o referencia es muy apreciada.

public static Resource getTestFile() throws IOException {
    Path testFile = Paths.get(FILE_PATH);
    System.out.println("Creating and Uploading Test File: " + testFile);
    return new FileSystemResource(testFile.toFile());
}
private static void uploadSingleFile() throws IOException {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);

    MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
    body.add("file", getTestFile());

    HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);

    String serverUrl = "http://localhost:8080/place";

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<DataTransportResponse> response = restTemplate.postForEntity(serverUrl, requestEntity,
                    DataTransportResponse.class);

    System.out.println("Response code: " + response.getStatusCode());
}

spring:
  application:
    name: file-manager
  servlet:
    multipart:
      max-file-size: 20480MB
      max-request-size: 2048MB 
application:
  seal:
    id: 104912
0
TuneIt 27 feb. 2020 a las 00:25

2 respuestas

La mejor respuesta

Lo resolví a través de ...

MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
            fileMap.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());
0
TuneIt 4 mar. 2020 a las 16:30

Puedes intentarlo de esta manera

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(54525952); //...specify your size of file  (20971520 - 20 MB) (54525952 - 52 MB)
    return multipartResolver;
}

He encontrado esta referencia en este enlace publicar. Espero que sea de gran ayuda.

0
raghavendra prasad gudipalli 27 feb. 2020 a las 14:37