原文网址:Knife4j系列--解决不显示文件上传的问题_IT利刃出鞘的博客-CSDN博客
简介
本文介绍使用Knife4j时无法上传文件的问题。
问题复现
依赖
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>
代码
package com.example.demo.business.controller;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@Api(tags = "文件")
@RestController
@RequestMapping("file")
public class FileController {@ApiOperation("上传文件")@PostMapping("upload")public void upload(MultipartFile file) {}
}
结果
可以看到,无法上传文件。
解决方案
在入参上添加注解@RequestPart
package com.example.demo.business.controller;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@Api(tags = "文件")
@RestController
@RequestMapping("file")
public class FileController {@ApiOperation("上传文件")@PostMapping("upload")public void upload(@RequestPart MultipartFile file) {}
}
结果
备注
网上有人说需要在方法上加@ApiImplicitParam注解,如下:
package com.example.demo.business.controller;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@Api(tags = "文件")
@RestController
@RequestMapping("file")
public class FileController {@ApiOperation("上传文件")@PostMapping("upload")@ApiImplicitParam(name = "file", dataTypeClass = MultipartFile.class, paramType = "form")public void upload(@RequestPart MultipartFile file) {}
}
经我测试,这个不需要加。只在参数上加@RequestPart即可。