前端遇到formData的请求参数怎么传?
思否 问答 👍 3 含 AI 优化版
问题
前端遇到formData的请求参数怎么传?
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
前端在需要以 FormData 格式传递请求参数(比如上传文件、混合表单字段)时,具体应该怎么构造和发送?
涉及技术
FormData、fetch/axios
期望结果
掌握用 FormData 组装并发送请求参数的写法。
回答
原始回答
2021-09-14 new FormData() 然后就是 append 咯。fm 就放在之前 body 或者 data 的位置
AI 优化 · 回答整理
解答思路
用 new FormData() 创建一个表单数据对象,通过 append 方法逐个添加字段(包括普通字段和文件),然后把这个 FormData 实例作为请求体传给 fetch 或 axios 原来放 body/data 的位置即可。
示例代码
const fm = new FormData();
fm.append('username', 'linong');
fm.append('avatar', fileInput.files[0]);
// fetch
fetch('/api/upload', {
method: 'POST',
body: fm,
});
// axios
axios.post('/api/upload', fm);
详细说明
- 使用
FormData时不需要手动设置Content-Type,浏览器会自动生成带boundary的multipart/form-data类型请求头;手动设置反而可能因为缺少正确的boundary导致后端解析失败。 append可以多次调用同一个 key,此时会形成多值字段(后端按数组接收,类似普通表单的多选)。- 如果字段值是文件对象(
File/Blob),直接append即可,FormData会按二进制文件处理。
小结
FormData 的用法就是「创建 -> append 逐个字段 -> 作为 body 传给请求」,浏览器会自动处理好 multipart/form-data 的请求头。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault