全网完美地解决Content type ‘multipart/form-data;boundary=----------0467042;charset=UTF-8‘ not supported)的问题

1. 复现问题

今天在做上传文件的功能,后端代码如下所示:

/**
 * @author 念兮为美
 * @datetime 2022/12/8 16:12
 * @desc 文件控制器
 */
@Api(tags = "文件模块")
@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {
    
    

  @Autowired private FileService fileService;
  @Autowired private JwtTokenProvider jwtTokenProvider;

  @ApiOperationSupport(author = "念兮为美")
  @ApiOperation(value = "文件上传")
  @PostMapping("/upload")
  @LogAnnotation
  public ReturnResult upload(
      @RequestHeader(value = REQUEST_HEADER_TOKEN) String token,
      @Validated @RequestBody UploadDto uploadDto,
      BindingResult bindingResult) {
    
    
    BindingParamUtil.checkParam(bindingResult);
    TokenProperties tokenProperties = jwtTokenProvider.parseToken(token);
    ReturnResult upload = fileService.upload(uploadDto, tokenProperties);
    return upload;
  }
}

但使用postman测试时,却报出如下错误:

在这里插入图片描述

后端报出的具体错误信息如下所示:

在这里插入图片描述

Content type 'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8' not supported的错误。

2. 分析问题

将上述错误信息翻译成中文不支持'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8'请求类型

为什么不支持这种类型呢?

原来我们在上传文件时,spring框架会自动装配文件类型,使用@RequestBody接收对象,所对应的content-type :application/json。所以当使用@RequestBody和文件上传的时候,会报错。

3. 解决问题

有以下两种解决方案:

  1. 删除@RequestBody注解

既然在上传文件时,不能使用@RequestBody,那就删除@RequestBody注解,如下代码所示:

@ApiOperationSupport(author = "念兮为美")
@ApiOperation(value = "文件上传")
@PostMapping("/upload")
@LogAnnotation
public ReturnResult upload(
    @RequestHeader(value = REQUEST_HEADER_TOKEN) String token,
    @Validated UploadDto uploadDto,
    BindingResult bindingResult) {
    
    
  BindingParamUtil.checkParam(bindingResult);
  TokenProperties tokenProperties = jwtTokenProvider.parseToken(token);
  ReturnResult upload = fileService.upload(uploadDto, tokenProperties);
  return upload;
}

删除@RequestBody注解之后,能够正确地上传文件了。

  1. 使用@RequestParam注解

使用@RequestParam注解替换掉@RequestBody注解,如下代码所示:

@ApiOperationSupport(author = "念兮为美")
@ApiOperation(value = "文件上传")
@PostMapping("/upload")
@LogAnnotation
public ReturnResult upload(
    @RequestHeader(value = REQUEST_HEADER_TOKEN) String token,
    @RequestParam("file") MultipartFile file,
    @RequestParam("fileType") String fileType) {
    
    
  TokenProperties tokenProperties = jwtTokenProvider.parseToken(token);
  UploadDto uploadDto = new UploadDto(file, fileType);
  ReturnResult upload = fileService.upload(uploadDto, tokenProperties);
  return upload;
}

以上两种解决方案,都重新使用postman测试后,能够正常上传图片,如下图所示:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lvoelife/article/details/128250668
今日推荐