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

通过AJAX提交FormData携带的文件在Laravel中无法读取该如何解决

Laravel读取FormData提交文件的解决方案

前端代码修正

你当前的提交逻辑存在错误:不应该将FormData实例作为普通JS对象的属性提交,所有参数都需要追加到同一个FormData实例中,同时需要补充CSRF令牌避免Laravel的请求校验失败。修正后的代码如下:

$(".lecture").click(function(e){
    e.preventDefault();
    // 仅创建一个FormData实例,所有参数都追加到这里
    var form = new FormData();
    form.append("file", $("#upload_file")[0].files[0]);
    form.append("courses_id", courses_id);
    form.append("content_id", content_id);
    form.append("lecture_title", $('#lecture_title').val());
    form.append("video_duration", $('#video_duration').val());
    form.append("video_url", $('#video_url').val());
    form.append("total_page", $('#total_page').val());
    form.append("lectur_description", $('input[name="lectur_description"]').val());

    $.ajax({
        type:'POST',
        url:"{{route('studio.courses.lectures.store')}}",
        data: form,
        contentType: false,
        processData: false,
        // 补充CSRF令牌,需要先在页面head中添加<meta name="csrf-token" content="{{ csrf_token() }}">
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
});

后端Laravel处理逻辑

在控制器中按以下步骤读取处理上传的文件:

  • 校验文件是否存在:使用$request->hasFile('file')判断请求中是否包含对应字段的上传文件
  • 校验文件有效性:调用$request->file('file')->isValid()确认文件上传过程无异常
  • 获取和存储文件:拿到UploadedFile实例后可按需读取属性、存储到指定位置

控制器示例代码:

public function store(Request $request)
{
    // 验证请求参数
    $validated = $request->validate([
        'file' => 'required|file|max:10240', // 按需调整文件大小和格式限制
        // 其他字段的验证规则补充
    ]);

    if ($request->hasFile('file') && $request->file('file')->isValid()) {
        $file = $request->file('file');
        // 获取文件原名称
        $originalName = $file->getClientOriginalName();
        // 获取文件扩展名
        $ext = $file->getClientOriginalExtension();
        // 存储文件到public磁盘的uploads目录,返回存储路径
        $savePath = $file->store('uploads', 'public');

        // 后续业务逻辑,将路径等信息存入数据库
    }

    // 返回响应
}

常见问题排查

  • 检查php.ini配置中的upload_max_filesize和post_max_size参数,确保参数值大于你上传的文件大小
  • 确认Laravel项目的storage目录已给web服务器进程开放读写权限
  • 若使用public磁盘存储文件,需要执行php artisan storage:link命令创建软链,让上传的文件可被外部访问
  • 确认接收请求的路由为POST类型,GET请求不支持文件上传

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:15:09