前端遇到formData的请求参数怎么传?

思否 问答 👍 3 含 AI 优化版

问题

前端遇到formData的请求参数怎么传?

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

前端在需要以 FormData 格式传递请求参数(比如上传文件、混合表单字段)时,具体应该怎么构造和发送?

涉及技术

FormDatafetch/axios

期望结果

掌握用 FormData 组装并发送请求参数的写法。

回答

原始回答

2021-09-14 new FormData() 然后就是 append 咯。fm 就放在之前 body 或者 data 的位置

AI 优化 · 回答整理

解答思路

new FormData() 创建一个表单数据对象,通过 append 方法逐个添加字段(包括普通字段和文件),然后把这个 FormData 实例作为请求体传给 fetchaxios 原来放 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,浏览器会自动生成带 boundarymultipart/form-data 类型请求头;手动设置反而可能因为缺少正确的 boundary 导致后端解析失败。
  • append 可以多次调用同一个 key,此时会形成多值字段(后端按数组接收,类似普通表单的多选)。
  • 如果字段值是文件对象(File/Blob),直接 append 即可,FormData 会按二进制文件处理。

小结

FormData 的用法就是「创建 -> append 逐个字段 -> 作为 body 传给请求」,浏览器会自动处理好 multipart/form-data 的请求头。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。