分段文件上传Spring Boot
我正在使用Spring Boot" title="Spring Boot">Spring Boot,并且想要使用Controller来接收分段文件上传。发送文件时,我不断收到错误415不支持的内容类型响应,并且永不到达控制器
There was an unexpected error (type=Unsupported Media Type, status=415).Content type 'multipart/form-data;boundary=----WebKitFormBoundary1KvzQ1rt2V1BBbb8' not supported
香港专业教育学院试图在HTML / jsp页面以及使用RestTemplate的独立客户端应用程序中使用form:action发送。所有尝试都给出相同的结果
multipart/form-data;boundary=XXXXX not supported.
从分段文档看来,必须将边界参数添加到分段上传中,但这似乎与控制器接收到的不匹配 "multipart/form-data"
我的控制器方法设置如下
@RequestMapping(value = "/things", method = RequestMethod.POST, consumes = "multipart/form-data" , produces = { "application/json", "application/xml" })
public ResponseEntity<ThingRepresentation> submitThing(HttpServletRequest request,
@PathVariable("domain") String domainParam,
@RequestParam(value = "type") String thingTypeParam,
@RequestBody MultipartFile[] submissions) throws Exception
使用Bean设置
@Bean public MultipartConfigElement multipartConfigElement() {
return new MultipartConfigElement("");
}
@Bean
public MultipartResolver multipartResolver() {
org.springframework.web.multipart.commons.CommonsMultipartResolver multipartResolver = new org.springframework.web.multipart.commons.CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
return multipartResolver;
}
如你所见,我已经将消耗类型设置为“ multipart / form-data”,但是当发送multipart时,它必须具有边界参数并放置一个随机边界字符串。
谁能告诉我如何在控制器中设置内容类型以匹配或更改请求以匹配控制器设置?
我尝试发送…尝试1 …
<html lang="en"><body>
<br>
<h2>Upload New File to this Bucket</h2>
<form action="http://localhost:8280/appname/domains/abc/things?type=abcdef00-1111-4b38-8026-315b13dc8706" method="post" enctype="multipart/form-data">
<table width="60%" border="1" cellspacing="0">
<tr>
<td width="35%"><span>File to upload</span></td>
<td width="65%"><input type="file" name="file" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="Add" /></td>
</tr>
</table>
</form>
</body>
</html>
尝试2 ....
RestTemplate template = new RestTemplate();MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("file", new FileSystemResource(pathToFile));
try{
URI response = template.postForLocation(url, parts);
}catch(HttpClientErrorException e){
System.out.println(e.getResponseBodyAsString());
}
尝试3 …
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter(); formHttpMessageConverter.setCharset(Charset.forName("UTF8"));
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add( formHttpMessageConverter );
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
map.add("file", new FileSystemResource(path));
HttpHeaders imageHeaders = new HttpHeaders();
imageHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> imageEntity = new HttpEntity<MultiValueMap<String, Object>>(map, imageHeaders);
ResponseEntity e= restTemplate.exchange(uri, HttpMethod.POST, imageEntity, Boolean.class);
System.out.println(e.toString());
回答:
@RequestBody MultipartFile[] submissions
应该
@RequestParam("file") MultipartFile[] submissions
这些文件不是请求主体,它们是请求主体的一部分,并且没有内置HttpMessageConverter
函数可以将请求转换为的数组MultiPartFile
。
你也可以替换HttpServletRequest
使用MultipartHttpServletRequest
,这使你可以访问各个部分的标题。
以上是 分段文件上传Spring Boot 的全部内容, 来源链接: utcz.com/qa/416562.html