413 请求实体太大 - 使用 Spring Boot 和 Rest 模板

akn*_*non 5 java spring amazon-web-services resttemplate angularjs

使用 Spring Rest 模板上传 100 MB 文件,使用多部分发布请求。

客户代码:

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);
Run Code Online (Sandbox Code Playgroud)

但是,服务器(部署在 Amazon AWS 上的 Springs Boot 应用程序)返回:

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)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我可以使用 angular JS 代码将同一个文件上传到同一个 Spring Boot 应用程序。

虽然在角度代码中我使用: forceChunkSize : true

我可以在 java 中做同样的事情吗?

Ali*_*ani 5

也许这有帮助:

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

RestTemplate template = new RestTemplate(factory);
Run Code Online (Sandbox Code Playgroud)

当通过 POST 或 PUT 发送大量数据时,建议将此属性更改为 false