使用 Springfox 和 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
    }
}

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

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

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

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

不起作用。如果有人可以演练如何让此按钮出现在多部分文件中?我会永远感激不尽。


答案 1

我认为您缺少第二个代码段中@RequestMappingconsumes 属性。请参阅以下示例

@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<>();
}

答案 2

@RequestPart(required = true) MultipartFile file

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

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


推荐