You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Klein接收React前端发送的multipart/form-data请求无数据问题

核心错误原因

  • 前端fetch请求中手动设置了multipart/form-data请求头和固定boundary值,这是导致数据无法解析的根本原因。当你使用FormData作为请求体时,浏览器会自动生成符合规范的Content-Type请求头,并且携带和请求体分隔符完全匹配的动态boundary值,手动指定的boundary和实际请求体的分隔符不匹配,会导致PHP无法正常解析multipart请求内容,因此解析后的文件、表单字段全为空,但请求的Content-Length数值正常。

修复步骤

  1. 前端删除fetch配置中手动设置的Content-Type请求头,修改后的请求代码如下:
const data = new FormData();
data.append('sourceId', sourceId);
data.append('customerId', customerId);
// 若需要上传文件,追加文件参数即可,例:data.append('upload_file', 选中的File对象)
const resp = await fetch(URL_CREATE_DOC, {
  method: 'POST',
  body: data
  // 不需要手动设置Content-Type头,浏览器会自动处理
});
  1. 后端Klein框架按参数类型选择对应获取方式:
  • 普通表单字段(如示例中的sourceId、customerId这类非文件参数),从参数集合中获取:
// 获取单个参数
var_dump($request->params('sourceId'));
// 获取所有表单参数
var_dump($request->params());
  • 上传的文件才使用files()方法获取:
// 获取单个文件
var_dump($request->files('upload_file'));
// 获取所有上传文件
var_dump($request->files()->all());

异常排查(如果修复后仍有问题)

  • 确认PHP配置中的post_max_size和upload_max_filesize值大于你上传的文件大小,避免文件过大被PHP直接过滤
  • 确认接口路由没有配置301/302跳转规则,跳转过程中会丢失POST请求体

内容的提问来源于stack exchange,提问作者Poulpy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:06:04