Laravel 5.3,检查上传文件是否大于upload_max_filesize(可选上传)

Iva*_*van 7 php upload laravel

在Laravel 5.3中,我试图捕获上传文件的文件大小是否大于upload_max_filesize.上传字段不是必需的.

我尝试过这种方法,但它不起作用

public function checkFile($field)
{
    if (request()->hasFile($field)){ // check if field is present
        $file = request()->file($field);
        if (!$file->isValid()){ // now check if it's valid
            return back()->with('error', $file->getErrorMessage());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能使用只是if (!$file->isValid())因为文件字段是可选的,我得到一个Call to a member function isValid() on nullif字段是空的.

所以我必须检查字段是否存在使用if (request()->hasFile($field)),但这不适用于大文件,因为dd(request()->hasFile('picture'))返回false.

当然,我可以依赖默认的Laravel Validator消息,但是我得到一个The picture failed to upload.不给用户任何线索的假人.

Cur*_*ros 6

仅当您上传的文件大小小于php.ini中设置的限制时,Laravel验证才有效.

如果您尝试上传大于限制的文件,PHP将不会将请求转发给Laravel,并且会立即出错.因此,Laravel在这种情况下无能为力.

解决这个问题的一种方法是在php.ini中设置一个更大的限制,然后在Laravel中验证文件大小.


edc*_*dcs 4

您应该考虑使用内置的 Laravel 表单请求验证系统。有一个内置的验证规则可以让您指定max文件大小,您可以在此处查看文档:

https://laravel.com/docs/5.3/validation#rule-max

你的规则看起来像这样:

[
    'video' => 'max:256'
]
Run Code Online (Sandbox Code Playgroud)

如果上传的文件大于 256kb,此操作将会失败。

您提到您不喜欢 Laravel 内置的验证错误消息。没问题!您可以在语言文件中更改它们resources/lang/en/validation.php,这是您需要更改的行:

https://github.com/laravel/laravel/blob/master/resources/lang/en/validation.php#L51

  • 如果您的“upload_max_filesize”设置太低,则任何形式的服务器端验证都将不起作用 - 您需要增加此值。 (4认同)