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

Laravel上传3GB视频报错:Request Entity Too Large及419页面过期

解决Laravel上传3GB视频报错的问题

错误原因拆解

你遇到三个核心问题:

  1. Apache请求实体过大:仅修改PHP配置不够,Apache自身也限制了请求体的大小
  2. Laravel 419页面过期:大文件上传耗时久,导致CSRF令牌或会话超时
  3. 代码验证规则限制:表单验证里的max:380928仅允许约372MB的文件,远低于3GB的需求

分步解决

1. 修正代码中的文件大小验证规则

验证规则里的max参数单位是KB,3GB对应的KB数值是3*1024*1024=3145728,同时清理无效代码:

if($request->has('videos_path')){
  $request->validate([
      'videos_path'=>'required|file|max:3145728|mimetypes:video/mp4', // 改为3GB对应的KB值
  ]);
  $extension = strtolower($request->videos_path->extension());
  $filename = time() . rand(100, 999) . '.' . $extension;

  // 注:getClientOriginalName是方法,不能直接赋值,以下无效代码已删除
  // $request->videos_path->getClientOriginalName = $filename;

  $request->videos_path->move('assets/admin/uploads/movies/videos', $filename);
  $data['videos_path']= 'assets/admin/uploads/movies/videos/'. $filename;
}

2. 调整Apache的请求体大小限制

编辑Apache的httpd.conf配置文件,或项目根目录的.htaccess文件,添加以下配置:

# 设置最大请求体为4GB(与php.ini的post_max_size=4096M对应)
LimitRequestBody 4294967296

如果使用.htaccess,需确保Apache配置中开启了AllowOverride All,允许该配置生效。

3. 解决Laravel 419页面过期问题

  • 延长会话有效期:编辑config/session.php,修改会话时长(单位:分钟),比如设置为24小时:
    'lifetime' => 1440,
    'expire_on_close' => false,
    
  • 确保CSRF令牌正确:表单中必须包含@csrf指令;若用AJAX上传,需在请求头携带令牌:
    // AJAX上传示例
    $.ajax({
        url: '/your-upload-url',
        type: 'POST',
        data: formData,
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        // 其他上传配置...
    });
    
  • 增加PHP执行时间:在php.ini中补充配置:
    max_execution_time=1080
    

4. 验证配置生效

修改完成后,重启Apache和PHP服务,通过phpinfo()确认PHP配置已正确加载,再测试上传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:31:34