当前位置: 首页 > 知识库问答 >
问题:

使用Springfox和Swagger ui上传多部分文件

南宫俊喆
2023-03-14

我使用Spring MVC作为Rest控制器,我已经使用Springfox将Swagger用户界面与我的控制器集成在一起。我希望有一个能够通过Swagger用户界面上传文件的方法。我只需要两个参数,一个对象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
    }
}

行不通。如果有人能介绍一下如何在MultipartFile中显示此按钮?我将永远感激你。

共有3个答案

高寒
2023-03-14

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

  1. 我的MultipartFile请求参数必须命名为“file”,否则,swagger ui将不会显示文件上载输入控件
@RequestParam("file") MultipartFile file
@Bean(name = "multipartResolver")
public CommonsMultipartResolver commonsMultipartResolver(){
    return new CommonsMultipartResolver();
}
齐典
2023-03-14

使用

@Request estPart(必需=true)MultipartFile文件

并且使用2.1.0或最新版本,以前的版本有一个bug。

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

阮俊弼
2023-03-14

我认为您在第二个代码片段中缺少了@RequestMapping的consumes属性。请参见以下示例

@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<>();
}
 类似资料:
  • 我想通过调用rest web服务上传文件。此web服务需要MultipartFile。 我在这里读到我可以做到这一点:使用Spring Rest模板Spring Web MVC上传多部分文件 这是我的代码: 杰克逊尝试以JSON形式序列化该文件,但它失败了,并出现以下错误: 如何禁用文件的json序列化?

  • 在Android中使用OKHTTP以多部分方式上传单个大文件(更具体地说,上传到s3)时,我有什么选择?

  • 我正在Spring controller中努力实现多部分文件上传。我读过很多问题,谷歌,但似乎什么都不管用。 我明白了 我的BE控制器: FE,angularJS: HTML: 还有应用程序。属性包括: 更新: 当我按照@Byeon0gam的建议从我的控制器中删除@RequestParam时,我不再会遇到这个错误,但是我的文件在控制器中是空的。虽然在FE服务中,如我所见,它不是空的:

  • 我正在使用这个音频记录和视频文件,它是工作的,但我想用OKHTTP取代它。我没弄明白。有人能帮我一下吗?

  • 我正在尝试向S3发出上传请求,以便上传一个文件。在我目前掌握的最可靠的代码下面, 我总是从服务器收到400(错误请求)。我不确定我是否正确使用了多部分上传。 但是当我使用像POSTMAN这样的任何Rest客户端做同样的事情时,它工作得很好, 这将是有帮助的,如果有人可以抛出一些光在多部分上传放心。 我已经查看了以下链接, 放心文档 放心的示例 编辑1: 我试着将上面的邮递员请求转换成curl,并用