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

编程知识 更新时间:2023-04-05 05:14:47

文章目录

  • 1. 复现问题
  • 2. 分析问题
  • 3. 解决问题

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测试后,能够正常上传图片,如下图所示:

更多推荐

全网完美地解决Content type ‘multipart/form-data;boundary=----------0467042;charset=UTF-

本文发布于:2023-04-05 05:14:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/76764631f99893a54ed07622a62d5f9b.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:完美   multipart   form   type   data

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 44957文章数
  • 14阅读数
  • 0评论数