在Spring启动和REST API中上传multipart / form-data文件

时间:2018-06-12 12:57:02

标签: java rest spring-boot storage multipartform-data

我想上传.png文件和存储。当我发送内容类型= multipart / form-data时,我收到此例外

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 
  'application/octet-stream' not supported . 

我认为我的应用程序不了解form-data contentType并抛出一个无关的异常。怎么了?

    @Controller
    public class ProfileController {
        private static final Logger logger = LoggerFactory.getLogger(ProfileController.class);

        @Autowired
        ProfileService service;

        //http : http --pretty all --form PUT localhost:8080/profile/v1?thumb=glb
        @PutMapping(value = "/v1")
        public Mono<ResponseEntity<String>> upload(@RequestPart(value = "thumb", required = false) String thumbFilterName,
                                                   @RequestPart(value = "genthumb", required = false) String genthumb,
                                                   @RequestPart("hash") String hash,
                                                   @RequestPart("uploader") Long uploader,
                                                   @RequestPart("file") MultipartFile file) throws Exception {


        System.out.println(thumbFilterName);
        System.out.println(gentumb);
        System.out.println(uploader);
        System.out.println(file);
//and doing storage stuff!
return Mono.just(ResponseEntity.ok().build());
        }
    }

这是我的Rest Client,用于发送文件。注意回应。

这些是restClient的截图。使用restClient发送文件:

sending file with restClient

这是设置标题

and this is setting headers

1 个答案:

答案 0 :(得分:1)

uploader中,您必须将@RequestPart更改为@RequestParam

@RequestPart("uploader") Long uploader,

Javadoc explaination

  

请注意,@ RequestParam注释也可用于将“multipart / form-data”请求的一部分与支持相同方法参数类型的方法参数相关联。主要区别在于,当method参数不是String时,@ RequestParam依赖于通过已注册的Converter或PropertyEditor进行类型转换,而@RequestPart依赖于HttpMessageConverters,并考虑请求部分的“Content-Type”标头。 @RequestParam可能与名称 - 值表单字段一起使用,而@RequestPart可能与包含更复杂内容的部分(例如JSON,XML)一起使用。