用于最大文件大小的Laravel验证规则不起作用

时间:2018-09-18 11:17:18

标签: php laravel file validation

enter image description here在我的laravel项目中,我的验证程序片段为

$this->validate($request,
    ['name'=>'required|unique:activities,name,'.$request->id,
    'images.*'=>'image|max:65536',
    'description'=>'required'
    ]
    );

我希望一次最多上传64 MB的图像。我还在php.ini文件中将max_upload_size和max_post_size设置为等于64 MB,并将max_file_uploads编辑为安全的高值。 当我尝试上传超过64 MB的文件时,它不应该返回错误消息并将我重定向到上一条消息吗? 但是我收到PostTooLargeException的消息,

    public function handle($request, Closure $next)
{
    $max = $this->getPostMaxSize();

    if ($max > 0 && $request->server('CONTENT_LENGTH') > $max) {
        throw new PostTooLargeException;
    }

    return $next($request);
}

为什么会这样?大多数答案指示我编辑已经完成的php.ini文件。如何阻止这种情况的发生,并通过验证错误消息将用户安全地重定向到上一页?

1 个答案:

答案 0 :(得分:3)

之所以得到这样的输出,是因为在控制权付诸行动之前就已经发生了错误,因此您无法在Controller中对其进行任何操作。

但是,如果您真的想捕获此异常,则可以在render()文件夹中的Handler.php的{​​{1}}方法中添加自定义异常处理代码。

我自己编写了这样的代码,例如:

app/Exceptions

您必须指定if ($exception instanceof \Illuminate\Session\TokenMismatchException) { 类的完整限定路径,而不是\Illuminate\Session\TokenMismatchExceptionPostTooLargeException是先前指定的$exception方法的参数。