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

Laravel5.8通过ajax上传文件时dd($request->all())返回空数组问题

问题原因排查&修复方案

核心错误

你当前AJAX配置使用GET请求提交文件,GET请求本身不支持传输二进制文件流和FormData对象,所有提交的参数会被直接丢弃,这是控制器获取不到参数的最主要原因。

完整修复步骤

    1. 修改AJAX请求类型为POST
      原AJAX配置里的type:"get"改为type:"post",修改后的JS代码如下:
    $('#inputfile').on('change',function(ev){
      ev.preventDefault(); 
      var postData=new FormData();
      postData.append('file',this.files[0]);
      $.ajax({
        url:'{{url('reporting/uploadFile')}}',
        headers:{'X-CSRF-Token':$('meta[name=csrf_token]').attr('content')},
        type:"post", // 此处修改为POST请求
        contentType:false,
        data:postData,
        processData:false,
        // 调试阶段可以先注释掉dataType,避免非JSON返回触发error回调
        // dataType:'json',
        success: function( data ) {
          console.log(data)
        },
        error: function() {
          alert('error');
        }
      });
    });
    
    1. 确认路由配置为POST类型
      到routes/web.php中检查上传路由,必须使用Route::post注册:
    Route::post('reporting/uploadFile', [你的控制器类名::class, 'uploadFile']);
    
    1. 确认Blade模板头部存在CSRF元标签
      模板<head>区域需要添加如下代码,否则Laravel的CSRF校验会拦截请求:
    <meta name="csrf_token" content="{{ csrf_token() }}">
    
    1. 控制器获取文件调整
      上传的文件需要用file方法获取,后续业务开发可以参考如下写法:
    public function uploadFile(Request $request){
      // 调试可以先打印所有请求参数,确认能拿到file字段
      dd($request->all());
      // 后续获取文件的标准写法
      // $file = $request->file('file');
      // 存储文件到storage/app/public目录的示例
      // $path = $file->store('public');
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:48:00