在 laravel 中使用最大文件大小的验证错误

Posted

技术标签:

【中文标题】在 laravel 中使用最大文件大小的验证错误【英文标题】:validation error using max file size in laravel 【发布时间】:2019-01-03 06:55:13 【问题描述】:

我在上传文件 - excel 文件时遇到问题。

我在 laravel 5.5 中使用此规则来获得最大文件大小 3MB。根据文档,该值必须以 KB 为单位。

// Max file size: 3MB (3000 KB)
$validator = Validator::make($request->all(), [
    'Feed' => 'file|max:3000',
]);
if ($validator->fails()) 
        return Redirect::back()->withErrors(['File to big!']);
    

php.ini 中我有:

upload_max_filesize=3M

我要上传的文件是 2.3 MB。

我在验证时做错了什么?

更新

显示我要上传的文件的 $_FILES['Feed'] (original.xls = 2.3MB)

array:5 [
 "name" => "original.xls"
 "type" => ""
 "tmp_name" => ""
 "error" => 1
 "size" => 0
]

“错误”=> 1

并上传另一个 5.6 KB 的小文件:

array:5 [
 "name" => "test.xls"
 "type" => "application/vnd.ms-excel"
 "tmp_name" => "/tmp/phpJUJfy4"
 "error" => 0
 "size" => 5632
]

"error" => 0 我可以看到它的大小

更新 2

如果我开始从 excel 文件中删除并获得最大:2MB,则文件上传没有错误。

为什么? 2.0 MB 上传文件,2.1 MB 不上传文件???

【问题讨论】:

你有没有发现任何错误? 是....我返回的错误:“文件变大!” 你试过只用 'Feed' => 'max:3000', 检查验证器本身返回的错误。 @OluwatobiSamuelOmisakin 验证器本身:“Feed 上传失败。”并仅尝试使用 max:3000 和相同的错误 【参考方案1】:

问题出在 php.ini 中

在我的服务器(ubuntu 18.04)上,我使用的是 php 7.1 并更改了

upload_max_filesize=3M

仅来自 apache2/php.ini 文件来自:

/etc/php/7.1/apache2/php.ini

当我更改另一个 (cli) 时,现在可以:

/etc/php/7.1/cli/php.ini

【讨论】:

【参考方案2】:

当文件发送到服务器时,浏览器使用 MIME 编码将所有不可打印的字节转换为可打印的字符。这种编码会增加文件大小。

因此,当您发送 2.3Mb 文件时,其实际大小会超过 3Mb。

【讨论】:

以上是关于在 laravel 中使用最大文件大小的验证错误的主要内容,如果未能解决你的问题,请参考以下文章

文本区域验证最大规则在 laravel 6 中不起作用

Laravel 8.38 验证问题,最大文件大小。 RuntimeException:无法打开文件 public path。在第 46 行的文件 Psr17Factory.php 中

Laravel 验证检查数组大小的最小值和最大值

如何使用 JavaScript 验证文件的大小?

如何验证多个文件的最大文件大小为每个文件 2 mb? (验证)

如何在 laravel 中最大化行大小 | mysql