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 中做同样的事情吗?
也许这有帮助:
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setBufferRequestBody(false);
RestTemplate template = new RestTemplate(factory);
Run Code Online (Sandbox Code Playgroud)
当通过 POST 或 PUT 发送大量数据时,建议将此属性更改为 false
| 归档时间: |
|
| 查看次数: |
17002 次 |
| 最近记录: |