使用Springfox和Swagger-ui上传Multipart文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Springfox和Swagger-ui上传Multipart文件相关的知识,希望对你有一定的参考价值。

我使用Spring MVC作为休息控制器,我使用Springfox将Swagger-ui与我的控制器集成在一起。我想要一个能够通过Swagger-ui接口上传文件的方法。我只需要两个参数,一个长对象id和要上传的文件。

@RestController
public class controller{
    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public void uploadFile(@RequestParam Long id,
                           @RequestParam MultipartFile file){
          //do some stuff
    }
}

我已经尝试了几乎所有内容,但我无法显示文件上传按钮。但是,如果我这样做:

@RestController
public class Controller{
    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public void uploadFile(@RequestParam Long id,
                           @RequestPart File file){
         //do some stuff
    }
}

出现文件上载按钮,但在尝试上载文件时始终会抛出http代码415。此外,我需要输入为MultipartFile,而不是常规文件。即使我将@RequestPart注释与Multipart文件一起使用,也不会出现选择要上载的文件按钮。我怎样才能让它工作?甚至:

@RestController
public class Controller{
    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public void uploadFile(@RequestPart String metaData,
                           @RequestPart MultipartFile file){
        //do some stuff
    }
}

不行。如果有人可以演示如何让这个按钮出现在MultipartFile中?我永远感激不尽。

答案

在我的情况下,我需要做两件事

  1. 我的MultipartFile请求参数必须命名为'file',否则,swagger-ui将不会显示文件上传输入控件
@RequestParam("file") MultipartFile file
  1. 我必须注册以下bean
@Bean(name = "multipartResolver")
public CommonsMultipartResolver commonsMultipartResolver(){
    return new CommonsMultipartResolver();
}
另一答案

使用

@RequestPart(required = true) MultipartFile file

并使用版本号2.1.0或最新版本,以前的版本存在错误。

https://github.com/springfox/springfox/issues/786

另一答案

两件事情...

  1. 消费价值应该是“多部分/形式数据”。消耗=“多部分/格式数据”
  2. @RequestPart(“file”)@ApaParam(value =“File”,required = true)MultipartFile文件
另一答案

我想你在第二个片段中缺少@RequestMapping的consumemes属性。请参阅以下示例

@RequestMapping(
    path = "/upload", 
    method = RequestMethod.POST, 
    consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<String> handleUpload(
        @RequestPart("file") MultipartFile file, 
        @RequestParam("someId") Long someId,         
        @RequestParam("someOtherId") Long someOtherId) { 
    return new ResponseEntity<>();
}

以上是关于使用Springfox和Swagger-ui上传Multipart文件的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot中部署Swagger2和Swagger-UI

Swagger-UI

添加了 Springfox Swagger-UI 但它不起作用,我错过了啥?

swagger使用总结

Spring + Springfox + Header 参数

如何使用 springfox 在 Swagger UI 中绕过授权