当前位置: 首页 > news >正文

前端最常用的两种请求数据格式application/json 和 multipart/form-data 完全解析

这两个是前端最常用的两种请求数据格式,核心区别在于传输的数据类型、格式结构、使用场景,也是前端面试和接口开发必考点。

我用最清晰、最实用的方式给你讲透👇

一、先记住一句话总结

  1. application/json:传普通数据(JSON 对象、字符串、数字等),不能传文件
  2. multipart/form-data:专门用来传文件(图片 / 视频 / 文档),也能传普通数据

二、application/json(最常用)

1. 是什么?

标准的JSON 格式请求,后端最容易解析,是现代前后端分离项目的默认格式。

2. 适用场景

  • 登录、注册
  • 增删改查接口
  • 传递普通对象、数组、字符串
  • 无文件上传的所有接口

3. 前端请求示例(axios)

axios({ url: "/api/login", method: "post", // 必须指定请求头 headers: { "Content-Type": "application/json;charset=UTF-8" }, // 直接传 JS 对象,axios 会自动转 JSON 字符串 data: { username: "test", password: "123456" } });

4. 特点

  • 数据结构清晰:key:value
  • 体积小、传输快
  • 不支持文件上传
  • axios默认就是这个格式(不用手动写 headers)

三、multipart/form-data(文件上传专用)

1. 是什么?

表单数据格式,会把数据分成多个 “部分” 传输,专门用于上传文件

2. 适用场景

  • 上传头像、图片
  • 上传视频、Excel、PDF
  • 同时传文件 + 普通字段

3. 前端请求示例(必须用 FormData)

// 1. 创建 FormData 对象 const formData = new FormData(); // 2. 添加普通数据 formData.append("username", "test"); formData.append("age", 20); // 3. 添加文件(关键!) formData.append("avatar", file); // file 是 input 选中的文件对象 // 4. 发送请求 axios({ url: "/api/upload", method: "post", data: formData, // 重点:不要手动写 Content-Type // 浏览器会自动生成 multipart/form-data + boundary });

4. 重要注意点

  • 必须使用new FormData()
  • 不要手动设置Content-Type浏览器会自动生成带分隔符的格式:multipart/form-data; boundary=----WebKitFormBoundaryxxx
  • 可以同时传文件 + 普通参数

四、核心区别对比表(必背)

特点application/jsonmultipart/form-data
数据格式JSON 字符串FormData 分段格式
支持文件❌ 不支持✅ 完美支持
传输速度稍慢(分段传输)
使用场景普通接口文件上传
前端写法直接传对象必须用 FormData
Content-Type手动 / 自动设置浏览器自动生成
后端解析简单需要文件解析库

五、最容易踩的坑

  1. 传文件用了 json 格式→ 文件传不过去,后端接收不到
  2. 上传文件手动写了 Content-Type→ 后端解析失败,报格式错误
  3. 把 FormData 直接打印看不到内容→ 必须用formData.get("key")查看

六、快速选择指南

  • 只要不上传文件→ 用application/json
  • 只要上传文件(图片 / 视频 / 文档)→ 用multipart/form-data

总结

  1. application/json:普通数据接口,默认格式,不能传文件
  2. multipart/form-data文件上传专用,必须用FormData,不手动写请求头
  3. 90% 的业务接口用 json,只有上传文件用 form-data
http://www.jsqmd.com/news/648701/

相关文章:

  • 彩信第三方接口如何开发?API接入方案
  • 面试官问你做过几层板,这么回才加分
  • mT5分类增强版中文-base WebUI部署案例:高校NLP教学实验平台快速搭建实录
  • RWKV7-1.5B-G1A实战:利用C语言接口进行高性能嵌入式集成探索
  • AI智能体Agent核心技术(PPT方案)
  • API 市场:一次接入,告别 N 家厂商对接,开发效率翻倍
  • cv_unet_image-matting二次开发案例:增加锐化功能与背景模板库
  • 关于复刻市面互动影游的故事线面板方法?
  • STM32 FatFS连续写入SD卡数据丢失?3个常见坑点与实战修复方案
  • W-TRS-5.5D7红外测温传感器:电饭煲智能化测温的革新力量
  • gozero限流、熔断、降级如何实现?面试的时候怎么回答?
  • C语言教程
  • 保姆级教程:用RKDevTool给RK3576开发板烧录固件,一次搞定所有坑
  • TDengine跨服务器数据迁移实战:taosdump工具性能评估与踩坑指南
  • Python IDE:高效编程利器
  • 企业网盘哪个品牌好用?2026年企业高效办公网盘TOP5产品全景测评
  • 工业缺陷检测应用:结合YOLOv5与PyTorch 2.8实现高精度识别
  • Pixel Mind Decoder 生成情绪化音乐推荐列表:基于文本听歌报告的情感分析
  • 浏览器如何确定最终的CSS属性值?解析计算优先级与规则
  • DeerFlow深度研究助理5分钟快速上手:零基础搭建个人AI研究助手
  • 畅销 100000 册,搞懂人工智能,看这一本就够了!
  • AI编程革命:流程图秒变精准代码
  • 避坑指南:Xilinx Aurora IP核多核例化时,GT_RESET信号必须保持10个时钟周期的原因
  • 华硕灵耀14 2025 锐龙版 UM3406KA 原厂Win11 24H2系统分享-宇程系统站
  • cesium feature点选
  • HarmonyOS 女性开发者沙龙:解码鸿蒙生态的 Next Practice 进化之路
  • 2026高性价比协作工具盘点:如何兼顾文件管理与数据安全?
  • **发散创新:多方安全计算在 Rust中的实践与落地**在现代分布式系统中,**多方安全计算(Multi-Par
  • C语言入门:认识程序的基本结构
  • AI 算法破解矿山痛点:洒煤堵煤智能监测