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

上传文件报错:the request was rejected because no multipart boundary was found

后端使用的springboot的MultipartFile上传文件,接口使用apifox调试过没有问题,但前端调接口报错。前端使用了fetch发送formData数据。

the request was rejected because no multipart boundary was found

前端使用的请求头是 multipart/form-data 没有问题,

但是经过排查发现发送文件后请求头为 : 

multipart/form-data; boundary=--------------------------280975778477701894170700

多了boundary=--------------------------280975778477701894170700这一段,

于是查询资料后得到了结果:

当你使用 fetch API 发送 FormData 对象时,通常不需要手动设置 Content-Type 头,因为 fetch 会自动为 FormData 设置正确的 Content-Type 头,包括必要的 boundary 字符串。如果你尝试手动设置 Content-Type 为 multipart/form-data 而不包含正确的 boundary,那么你会遇到错误,因为服务器无法解析请求中的多部分内容。

以下是一些可能导致错误的原因:

缺失或错误的 boundary:multipart/form-data 需要一个 boundary 来分隔不同的部分。如果你手动设置 Content-Type,但未提供正确的 boundary,或者 boundary 与实际请求体中的不匹配,服务器将无法解析请求。
手动设置 Content-Type:如果你手动设置了 Content-Type,那么 fetch 不会为你自动生成 boundary。你需要确保手动设置的 Content-Type 是完全正确的,包括 boundary。

错误示例:

fetch('/upload', {
  method: 'POST',
  body: formData,
  headers: {
    'Content-Type': 'multipart/form-data' // 错误:没有指定 boundary
  }
});

正确示例:

fetch('/upload', {
  method: 'POST',
  body: formData // 正确:浏览器会自动设置 Content-Type 和 boundary
});

如果你确实需要手动设置 Content-Type(通常不建议这样做),你需要确保包括正确的 boundary,如下所示:

const boundary = '--------------------------280975778477701894170700';
const formData = new FormData();

// ... 添加文件和其他表单数据到 formData ...

fetch('/upload', {
  method: 'POST',
  body: formData,
  headers: {
    'Content-Type': `multipart/form-data; boundary=${boundary}`
  }
});

但是,请记住,boundary 应该是唯一的,并且通常是由浏览器生成的。如果你手动指定 boundary,你需要确保它与 FormData 对象内部使用的 boundary 相匹配,这通常是不切实际的。

因此,最佳实践是不要手动设置 Content-Type 头,而是让浏览器处理 FormData 的发送。


http://www.kler.cn/a/536324.html

相关文章:

  • anaconda中可以import cv2,但是notebook中cv2 module not found
  • 【银河麒麟高级服务器操作系统】系统日志Call trace现象分析及处理全流程
  • 当今前沿技术:改变未来的核心力量
  • 从java角度对比nodejs、fastapi,同步和异步区别
  • 【2】高并发导出场景下,服务器性能瓶颈优化方案-异步导出
  • 三星OEM版SSD固态硬盘Model码对应关系
  • Linux-查看开放端口
  • java---->策略模式
  • Intellij IDEA如何查看当前文件的类
  • HTML之form表单学习
  • go结构体详解
  • 03-移除元素
  • leetcode:1897. 重新分配字符使所有字符串都相等(python3解法)
  • 开发板适配之UART
  • mybatisPlus介绍
  • Java 21 虚拟线程详解
  • 【C#】一维、二维、三维数组的使用
  • 测试中的第一性原理:回归本质的质量思维革命
  • 数据结构之顺序表和链表
  • s1:简单测试-时间规模化
  • Kotlin 使用虚拟线程并在低版本中自动切换到协程
  • zabbix v7.2.3容器运行Proxy代理服务器启用IPV6访问
  • 代码随想录算法【Day38】
  • SQL Server查询计划操作符(7.3)——查询计划相关操作符(6)
  • 第4节课:控制结构 - 条件语句、循环语句
  • 本地私有化部署 DeepSeek Dify ,告别“服务器繁忙,请稍后再试”