本文详解为何直接 `json.stringify()` 无法上传文件,以及如何使用 `formdata` 正确提交含图片的用户资料更新请求,确保姓名、邮箱与头像同步更新成功。
在构建用户资料更新功能时,一个常见误区是:试图将 File 对象与其他表单字段(如 name、email)一并序列化为 JSON 发送。这正是问题根源——浏览器无法将二进制文件(如图片)直接嵌入 JSON 字符串中;JSON.stringify({ image: file }) 实际会把 file 序列化为 {}(空对象),导致后端 req.file 始终为 undefined,头像更新自然失效。
✅ 正确做法是使用 FormData API 构造 multipart/form-data 请求体,它原生支持混合文本字段与二进制文件上传,且无需手动设置 Content-Type 头(浏览器会自动添加带 boundary 的正确类型)。