Laravel - 在超过 PHP 最大上传大小限制时验证文件大小

2022-08-31 00:15:59

我的网站托管在共享服务器上。最大上传限制为 5MB。我无法更改PHP ini设置,这很好。

在Laravel中,如果上传的文件小于5MB,则所有验证和文件上传都正常工作。但是,当上传大于5MB的文件时,我得到以下异常而不是验证错误:

FileException - The file "6MB_1.jpg" exceeds your upload_max_filesize ini directive (limit is 5120 KiB).

如何验证或强制文件低于从服务器上传的限制?


答案 1

post_max_sizeupload_max_filesize是可以设置的指令,以配置php.ini文件或.htaccess文件或httpd.conf文件。

php.ini 示例:

post_max_size=15M
upload_max_filesize=15M

.htaccess 示例:

php_value post_max_size=15M
php_value upload_max_filesize=15M

httpd.conf 示例:

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html/example/
    ErrorLog /var/log/httpd/error.log
    <Directory /var/www/html/example/>
      AllowOverride None
      <IfModule mod_php5.c>
        php_value post_max_size=15M
        php_value upload_max_filesize=15M
      </IfModule>
    </Directory>
</VirtualHost>

答案 2

您似乎对更改PHP限制以允许更大的文件不感兴趣。在我看来,您希望最大上传量为5MB,如果超过此值,则返回正确的响应。

您可以在 异常处理程序 中处理异常,位于 。更新方法以添加所需的代码。例如,如果要返回验证异常,则需要在异常的异常处理程序内处理验证。FileExceptionapp/Exceptions/Handler.phprenderFileException

public function render($request, Exception $exception)
{
    if ($exception instanceof \Symfony\Component\HttpFoundation\File\Exception\FileException) {
        // create a validator and validate to throw a new ValidationException
        return Validator::make($request->all(), [
            'your_file_input' => 'required|file|size:5000',
        ])->validate();
    }

    return parent::render($request, $exception);
}

这是未经测试的,但应该给你一个大的想法。

您还可以通过javascript进行客户端验证,以便太大的文件永远不会实际发送到您的服务器,但是javascript可以被客户端禁用或删除,因此最好设置良好的服务器端处理。

对于客户端验证,如果将事件处理程序附加到文件输入的“change”事件,则可以使用 检查文件大小,并在之后执行任何其他操作(禁用表单,删除上传的文件等)。this.files[0].size


推荐