使用Springfox和Swagger-ui分段上传文件

dru*_*ord 4 java spring file-upload spring-mvc swagger-ui

我将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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

出现文件上传按钮,但是在尝试上传文件时,它始终抛出HTTP代码415。此外,我需要输入的是MultipartFile,而不是常规文件。即使我将@RequestPart注释与Multipart File一起使用,也没有出现选择要上传的文件按钮。我如何使它工作???甚至:

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

不行 如果有人可以逐步介绍如何使此按钮出现在MultipartFile中?我将永远感激不已

abe*_*tig 11

我认为您在第二个代码段中缺少@RequestMapping消耗属性。看下面的例子

@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<>();
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*val 10

@RequestPart(required = true) MultipartFile file

并且使用2.1.0或最新版本号,之前的版本有bug。

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


小智 10

尝试对 MultipartFile 使用 @RequestPart 而不是 @RequestParam

@RestController
public class controller {

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

}
Run Code Online (Sandbox Code Playgroud)


ash*_*rio 6

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

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

  • 就我而言,我必须将@RequestParam更改为@RequestPart,就像原始答案一样。也许您应该编辑答案。蒂 (2认同)

小智 6

两件事情...

  1. 消耗的价值应该是"multipart/form-data"consumes="multipart/form-data"

  2. @RequestPart("file") @ApiParam(value="File", required=true) MultipartFile file