Laravel max上传大小限制

时间:2017-09-06 05:21:13

标签: php laravel file-upload

我的网站托管在共享服务器上。最大上传限制为5MB。如果上传的文件小于5MB,则所有验证和文件上传都可以正常工作。但是当上传大于5MB的文件时,我会看到这一点 enter image description here。 如何从服务器验证或强制文件处于上载限制之下?

10 个答案:

答案 0 :(得分:7)

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

您可以在FileException处理异常处理程序中的app/Exceptions/Handler.php异常。更新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检查文件大小,然后执行任何其他操作(禁用表单,删除上传的文件等)

答案 1 :(得分:5)

$validator = Validator::make($request->all(), [
    'file' => 'max:5120', //5MB 
]);
控制器中的

和php.ini

upload_max_filesize = 10MB

答案 2 :(得分:5)

post_max_size upload_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>

答案 3 :(得分:2)

您可以使用Laravel验证规则:

 'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000',
  

尺寸:值

     

验证字段的大小必须与给定值匹配。   对于字符串数据,该值对应于字符数。对于   数值数据,该值对应于给定的整数值。为   array,size对应于数组的计数。对于文件,大小   对应于以千字节为单位的文件大小。

You can read more about validation and its usage.

答案 4 :(得分:1)

在php.ini中更改以下参数即可!对我来说。

upload_max_filesize = 50M
memory_limit = 512M
max_input_time = -1
max_execution_time = 0

答案 5 :(得分:1)

enter image description here

步骤如下:

  • 打开你的终端[CTL + SHIFT t] 运行以下命令:

    $ php -i | grep php.i

上面的命令将打印您的服务器正在使用的 php.ini 文件的路径,在我的情况下,我得到了:

Configuration File (php.ini) Path => /etc/php/7.2/cli

加载的配置文件 => /etc/php/7.2/cli/php.ini

在此之前,您可能一直在编辑 /etc/php/7.2/apache2/php.ini 认为可以解决问题,但不,它没有! ?

现在运行:$ sudo nano /etc/php/7.2/cli/php.ini

我们关心的是 post_max_sizeupload_max_filesizememory_limit 的值,它们的默认值为 8M2M 和 {{1} } 分别。现在你明白为什么不能上传超过 2MB 大小的文件了?。

接下来,搜索这些变量并更改它们的值以满足您的需要。这样做时,请确保大小遵循与默认值相同的比率,即 128M 应该更大,然后是 memory_limit,然后是 post_max_size。例如,就我而言,我使用了以下值:

upload_max_filesize

完成更改值以满足您的需要后,使用 CTL X 保存更改然后键入 Y 并按 ENTER。

接下来,重启apache:post_max_size = 6G upload_max_filesize = 4G memory_limit = 8G

注意 - 如果正在运行 nginx,这适用于 apache 服务器 然后

$ sudo /etc/init.d/apache2 restart

编辑上述值

brew services restart php@7.2 [用你使用的php版本替换7.2] 这就对了!现在,您可以在上面指定的值范围内上传大文件,而不会遇到任何麻烦?。

答案 6 :(得分:0)

5 MB限制由您的虚拟主机设置,可能无法更改。

要上传大于限制的文件,您必须将其部分上传。

这样做的laravel包:https://github.com/jildertmiedema/laravel-plupload

答案 7 :(得分:0)

您可以通过最大验证程序

来检查文件的大小
 self.html_file.write(response.body.decode("utf-8"))

答案 8 :(得分:0)

在laravel中你可以像这样验证 -

$validator = Validator::make($request->all(), [
    'file' => 'max:5120',
]);

该值以千字节为单位。即最大值:10240 =最大10 MB。 并在jquery -

绑定到输入字段的onchange事件

$('#upFile').bind('change', function() {

  //this.files[0].size         gets the size of your file and then you can validate accourdingly...
  alert(this.files[0].size);

});

希望这会对你有所帮助。

答案 9 :(得分:0)

您可以使用jQuery / javascript执行此操作(这意味着该文件不会上传,但您可以在将文件发送到PHP脚本之前检查该文件)

$('#myFile').bind('change', function() {
  let filesize = this.files[0].size // On older browsers this can return NULL.
  let filesizeMB = (filesize / (1024*1024)).toFixed(2);

  if(filesizeMB <= 5) {
      // Allow the form to be submitted here.
  } else {
      // Don't allow submission of the form here.
  }

});

但总是要进行服务器端验证。如果你搬到一个更强大的网站,仍然希望你的网站没有任何怪癖。

$validator = Validator::make($request->all(), [
    'file' => 'max:5120', //5MB
]);

所有这些都是未经测试的,但应该有用。