加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Multipart文件上传Spring Boot

发布时间:2020-12-14 05:35:04 所属栏目:Java 来源:网络整理
导读:我使用 Spring Boot并想使用Controller来接收多部分文件上传. 发送文件时,我不断收到错误415不支持的内容类型响应,并且控制器永远不会被访问 There was an unexpected error (type=Unsupported Media Type,status=415).Content type 'multipart/form-data;bo
我使用 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不支持.

从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>&nbsp;</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数组.

您还可以使用MultipartHttpServletRequest替换HttpServletRequest,该对象可以访问各个部分的头文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读