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

新手上路,请多包涵

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

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

FileException - 文件“6MB_1.jpg”超出了您的 upload_max_filesize ini 指令(限制为 5120 KiB)。

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

原文由 baig772 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

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

您可以在 --- 的异常处理程序中处理 app/Exceptions/Handler.php FileException 异常。更新 render 方法以添加您需要的代码。例如,如果您想返回验证异常,则需要在 FileException 异常的异常处理程序中处理验证。

 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,因此最好设置好服务器端处理.

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

原文由 patricus 发布,翻译遵循 CC BY-SA 3.0 许可协议

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>

原文由 AddWeb Solution Pvt Ltd 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题