Toda la red resuelve perfectamente el problema del tipo de contenido 'multipart/form-data; border=----------0467042; charset=UTF-8' no soportado)

1. Reproducir el problema

Hoy, estoy haciendo la función de cargar archivos.El código de back-end es el siguiente:

/**
 * @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;
  }
}

Pero postmanal usar la prueba, se informa el siguiente error:

inserte la descripción de la imagen aquí

El mensaje de error específico informado por el backend es el siguiente:

inserte la descripción de la imagen aquí

es decir, Content type 'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8' not supportedel error.

2. Analizando el problema

Traduce el mensaje de error anterior al chino 不支持'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8'请求类型.

¿Por qué no se admite este tipo?

Resulta que cuando subimos un archivo, springel framework ensamblará automáticamente el tipo de archivo y utilizará @RequestBodyel objeto receptor correspondiente content-type :application/json. Entonces, al usar @RequestBodyy cargar archivos, se informará un error.

3. Resuelve el problema

Hay dos soluciones:

  1. borrar @RequestBodycomentario

Dado que no se puede usar al cargar un archivo, @RequestBodyelimine @RequestBodyla anotación, como se muestra en el siguiente código:

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

Después de eliminar @RequestBodyla anotación, el archivo se puede cargar correctamente.

  1. Usar @RequestParamanotaciones

@RequestParamReemplace anotaciones con anotaciones , @RequestBodycomo se muestra en el siguiente código:

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

Después de que el cartero vuelva a probar las dos soluciones anteriores, las imágenes se pueden cargar normalmente, como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí

おすすめ

転載: blog.csdn.net/lvoelife/article/details/128250668