xml文件上传必须用formdata而非json,因httpclient默认json序列化会破坏xml二进制内容;需禁用默认responsetype,设为’text’或’xml’以避免解析错误,并配合formdata、进度监听与正确后端解析。
XML文件上传必须用 FormData 而不是 JSON
Angular 的 HttpClient 默认序列化请求体为 JSON,但 XML 文件是二进制内容,不能直接 JSON.stringify。强行传 XMLDocument 或字符串会丢失编码、破坏格式,后端收到的大概率是乱码或空内容。
正确做法是把文件包装进 FormData,让浏览器自动设置 Content-Type: multipart/form-data 并处理边界分隔符。
- 读取
File对象(比如从<input type="file">获取) - 新建
FormData实例,用append('file', file)添加 - 注意不要手动设置
Content-Type请求头 ——HttpClient会自动忽略它,由浏览器生成正确的 multipart 头
HttpClient.post() 必须禁用 responseType 默认值
默认 responseType: 'json' 会让 Angular 尝试解析响应体为 JSON,但后端返回的可能是纯文本(如 "success")、XML 或空响应,导致 HttpErrorResponse 或解析失败。
上传成功后,你通常只关心状态码(200/201)和响应头,而不是响应体内容。