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

ASP.NET Web API 4对接Angular 2-rc4上传文件报mime multipart流意外结束错误

问题根因
  • 前端提交的请求体格式完全不符合multipart/form-data规范:你使用JSON.stringify()将上传对象序列化为JSON字符串作为请求体,但multipart/form-data要求使用带boundary分界的多段格式存储参数和文件,两者完全不兼容,后端解析时找不到对应分界符,直接判定流异常结束。
  • 手动硬编码Content-Type头的boundary值:multipart/form-data的boundary是浏览器生成、和请求体中的实际分界符严格对应的,你手动指定固定值后,和实际请求的分界符不匹配,后端按照你指定的boundary找不到请求结束标记,触发报错。
  • Postman请求正常是因为Postman会自动处理FormData的请求格式和对应Content-Type头,不需要手动配置,所以格式完全符合后端要求。
  • 你之前追加CRLF的方案无法生效,因为问题根源不在流结尾缺少换行,而是整个请求体的格式完全错误。
修复方案

前端代码修改(核心修复点)

废弃原来的JSON序列化和手动Content-Type配置,改用FormData对象封装上传内容:

// 1. 初始化FormData对象
const formData = new FormData();
// 2. 把原jobFilesUpload的业务参数逐个追加到FormData
formData.append('OBPJobId', jobFilesUpload.OBPJobId);
// 3. 追加要上传的文件,替换为你实际获取的文件对象即可
formData.append('uploadFile', 上传的文件对象, 原文件名);

const fileHeaders = new Headers();
fileHeaders.append('Accept', '*/*');
// 注意:不要手动加Content-Type和Access-Control-Allow-Origin头,跨域头是后端返回的响应头,前端配置无效

// 直接传formData作为请求体,不需要序列化
this.authHttp.post(this.authService.apiUrl + "api/upload/" + jobFilesUpload.OBPJobId, formData, { headers: fileHeaders }).subscribe(/* 原有后续逻辑 */)

后端代码优化

你之前追加CRLF的代码完全可以删除,前端格式正确的场景下不需要额外处理流,直接用ASP.NET Web API原生逻辑读取即可:

// 原生读取上传文件示例
if (HttpContext.Current.Request.Files.Count > 0)
{
    var uploadFile = HttpContext.Current.Request.Files[0];
    // 在此处添加文件保存、处理逻辑
}

内容的提问来源于stack exchange,提问作者Corey James Carney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:45:00