2016-01-13 1 views
1

Использование шаблона Spring Rest для загрузки файла размером 100 МБ с использованием многостраничного почтового запроса.413 Request Entity Too Large - с шаблоном загрузки и отдыха с весной

Client Код:

HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.MULTIPART_FORM_DATA); 
    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); 

    map.add("name", chunk.getFilename()); 
    map.add("filename", chunk.getFilename()); 
    map.add("flowChunkNumber", chunk.getNumber()); 
    map.add("flowChunkSize", chunkSize); 
    map.add("flowIdentifier", chunk.getIdentifier()); 
    map.add("flowTotalSize", chunk.getTotalSize()); 
    map.add("flowCurrentChunkSize", chunk.getSize()); 
    map.add("file", chunk.getResource()); 

    HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<MultiValueMap<String, Object>>(map, headers); 


    ResponseEntity<String> response = executeForResponse(
      baseUri().path("/api/v1/uploads/chunks") 
             .build().toUri(), HttpMethod.POST, entity, String.class); 

Однако сервер (источники загрузка приложение развернуто на Amazon AWS) возвращает:

org.springframework.web.client.HttpClientErrorException: 413 Request Entity Too Large 
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) 
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:614) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:570) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:545) 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:466) 

Как ни странно, я могу загрузить тот же файл, используя угловой код JS в такое же приложение Spring Boot.

Хотя в угловом коде я использую: forceChunkSize: истинный

Могу ли я сделать то же самое в Java?

ответ

2

Может быть, это помогает:

SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); 
factory.setBufferRequestBody(false); 

RestTemplate template = new RestTemplate(factory); 

При передаче больших объемов данных через POST или PUT, рекомендуется изменить это свойство ложной

+0

Нет, это не помогает. – aknon

+1

Спасибо, работал для меня. – stsatlantis