【问题标题】:Laravel token mismatch when uploading a file that's too large上传太大的文件时 Laravel 令牌不匹配
【发布时间】:2013-11-30 03:18:24
【问题描述】:

我正在使用 Laravel 4,并且在允许用户添加附件的电子邮件表单上,当我尝试提交超出我在 php.ini 中设置的 post_max_size 的文件时,我收到了令牌不匹配错误。我将这些行放在 csrf 过滤器中尝试调试:

Log::debug(Session::token());
Log::debug(print_r($_POST, true));
Log::debug(Input::get('_token'));
Log::debug(Session::token() != Input::get('_token'));

可以预见,$_POST 是空的,因此会话令牌总是与 null 进行比较。但是有什么方法可以优雅地让用户知道文件太大而不是抛出这个错误?

我也在使用 javascript 验证器,但我不想仅仅依靠 javascript 来避免引发此错误。

【问题讨论】:

    标签: upload laravel token mismatch


    【解决方案1】:

    我意识到这是一个老问题,但我遇到了它,我真的找不到任何解释这个问题的解决方案。所以,我想我会发布我的解决方案。

    我使用的是 Laravel 4.1,在 app/filters.php 中我将 Route::filter('csrf'.function() 更改为:

    Route::filter('csrf', function()
    {
        if (Session::token() != Input::get('_token'))
        {
            if (empty($_POST)) {
                $post_size = trim(ini_get('post_max_size'));
                $post_size = substr($post_size, 0, -1);
                $post_size = ($post_size * 1024) * 1024;
    
                if ($post_size < Request::header('Content-Length')) {
                    $validator = Validator::make(Input::all(), []);
    
                    $messages = $validator->errors();
                    $messages->add('file size', 'Files Cannot Exceed ' . ini_get('upload_max_filesize'));
    
                    return Redirect::back()->withErrors($messages);
                }
            }
    
            throw new Illuminate\Session\TokenMismatchException;
        }
    });
    

    显然,除了过大的图像之外的其他事情可能会导致 Content-Length 溢出,但这不太可能,所以我认为这是一个合理的风险。

    【讨论】:

      【解决方案2】:

      检查下面的这个链接,显然这个问题是由超过最大上传大小引起的.. solved

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-24
        • 1970-01-01
        • 2020-07-08
        • 2016-12-10
        • 2016-09-20
        • 2020-01-20
        • 2017-05-23
        • 2016-12-06
        相关资源
        最近更新 更多