Laravel中使用XMLHttpRequest提交FormData,控制器如何接收数据?
如何在Laravel控制器中获取前端FormData提交的数据?
我之前也碰到过一模一样的情况——用原生JS提交FormData后,在Laravel控制器里直接dd($request)看不到预期的数据,其实是Request对象的默认输出不会直接展示文件详情,而且获取FormData内容有特定的正确姿势,咱们一步步来解决:
先确认前端代码的关键细节
你的前端代码整体没问题,但要记住绝对不要手动设置Content-Type请求头——XMLHttpRequest在发送FormData时会自动生成带边界标识的multipart/form-data请求头,手动设置反而会让Laravel无法正确解析请求体。你的代码没碰这一步,这点做得很对。
控制器里正确获取FormData数据的方式
在Laravel中处理FormData的文件和普通字段,有专门的方法:
- 获取上传文件:用
$request->file('file1')(这里的file1对应你前端formdata.append("file1", file)里的键名),或者更简洁的$request->file1 - 验证文件有效性:拿到文件后用
isValid()方法检查是否上传成功 - 获取普通字段(如果有):如果FormData里还有非文件字段,比如
formdata.append("remark", "测试上传"),可以用$request->input('remark')或者$request->remark获取 - 查看完整提交数据:如果想看到所有提交内容(包括文件元数据),用
$request->all(),而不是直接dd($request)
给你一个修改后的控制器代码示例:
public function planUpload(Request $request, $id) { // 获取上传的文件 $uploadedFile = $request->file('file1'); // 检查文件是否有效上传 if ($uploadedFile && $uploadedFile->isValid()) { // 获取文件原始名称、大小等信息 $originalName = $uploadedFile->getClientOriginalName(); $fileSize = $uploadedFile->getSize(); // 打印文件相关信息 dd('文件上传成功', $uploadedFile, $originalName, $fileSize); } // 查看所有提交的数据(包括文件元数据) dd($request->all()); }
额外排查点
如果还是拿不到数据,可以检查这几点:
- 前端的
file变量是不是有效的File对象:在前端代码里加console.log(file),确认它是File类型且有内容 - CSRF Token是否正确:在浏览器开发者工具的请求头里,确认
X-CSRF-Token字段存在且值和页面meta标签里的一致 - 路由是否正确:确认你的路由是POST方法,并且正确传递了
$id参数,没有和其他路由冲突
内容的提问来源于stack exchange,提问作者Pavan
相关产品推荐
相关产品推荐

