Angular 12+Spring Boot文件上传报415不支持媒体类型错误求助
问题解决:Angular 12 上传图片报415 Unsupported Media Type
错误原因
后端返回415错误,提示Content type 'application/json' not supported,说明前端发送请求时,请求头的Content-Type被错误设置为application/json,但后端接口期望接收multipart/form-data类型(Postman测试正常,说明后端配置无问题)。
排查与解决方案
1. 检查全局HTTP拦截器
如果项目配置了HTTP拦截器,大概率是拦截器给所有请求统一设置了Content-Type: application/json,覆盖了FormData自动生成的正确请求头。
修改拦截器逻辑,对FormData类型的请求跳过Content-Type设置:
import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http'; import { Injectable } from '@angular/core'; @Injectable() export class HttpHeaderInterceptor implements HttpInterceptor { intercept(request: HttpRequest<any>, next: HttpHandler) { // 仅对非FormData的请求设置JSON类型头 if (!(request.body instanceof FormData)) { request = request.clone({ setHeaders: { 'Content-Type': 'application/json' } }); } return next.handle(request); } }
2. 避免手动设置Content-Type
当前前端代码未手动设置Content-Type,这是正确的。禁止手动给FormData请求添加Content-Type: multipart/form-data,因为FormData会自动生成包含boundary的完整Content-Type头,手动设置会丢失boundary信息,导致后端无法解析。
3. 确认后端接口参数配置
确保SpringBoot后端接口正确接收multipart类型数据,示例代码:
import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @PostMapping("/uploadFile") public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) { // 文件处理逻辑 return ResponseEntity.ok("文件上传成功"); }
- 不要使用
@RequestBody接收文件,@RequestBody用于解析JSON数据,文件上传需用@RequestParam或@RequestPart。
内容的提问来源于stack exchange,提问作者Vincent BDL
相关产品推荐
相关产品推荐

