我使用
Spring Boot并想使用Controller来接收多部分文件上传.
发送文件时,我不断收到错误415不支持的内容类型响应,并且控制器永远不会被访问
发送文件时,我不断收到错误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不支持.
从multipart文档看来,边界参数必须添加到多部分上传,但是这似乎与控制器接收“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”,但是当发送多部分时,它必须具有边界参数并放置一个随机边界字符串.
任何人都可以告诉我如何将控制器中的内容类型设置为匹配或更改我的请求以匹配我的控制器设置?
我试图发送…
尝试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%"><strong>File to upload</strong></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());