You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:50:30