如何在Laravel中验证最大文件大小?

2022-08-30 08:41:57

我正在尝试在Laravel中验证最大文件大小为500kb:

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

但这说明文件应该正好是500kb大。如何编辑此规则,使其在大于 500kb 时返回错误?

我试过了这个:

'file' => 'size:>=500'
'file'  => 'size:max:500'

文档对此只字未提:

大小:值

正在验证的字段必须具有与给定值匹配的大小。对于字符串数据,该值对应于字符数。对于数值数据,该值对应于给定的整数值。对于文件,大小对应于以 KB 为单位的文件大小。


答案 1

根据文档

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

该值以千字节为单位。即 = 最大 10 MB。max:10240


答案 2

编辑:警告!此答案适用于我的 XAMPP OsX 环境,但当我将其部署到 AWS EC2 时,它并没有阻止上传尝试。

我很想删除这个答案,因为它是错误的,但相反,我会解释是什么绊倒了我

我的文件上传字段名为“上传”,所以我收到“上传失败上传”。此消息来自验证中的以下行.php:

in resources/lang/en/validaton.php:

'uploaded' => 'The :attribute failed to upload.',

这是当文件大于 PHP 设置的限制时显示的消息。

我想覆盖此消息,通常可以通过将第三个参数$messages数组传递给 Validator::make() 方法来完成此操作。

然而我不能这样做,因为我从 React 组件调用 POST,它呈现包含 csrf 字段和上传字段的表单。

因此,相反,作为一个超级狡猾的黑客,我选择进入我的视图,显示消息,并用我友好的“文件太大”消息替换该特定消息。

如果文件小于 PHP 文件大小限制,则有效方法如下:

如果其他人正在使用Laravel FormRequest类,以下是在Laravel 5.7上对我有用的方法:

以下是我设置自定义错误消息和最大文件大小的方式:

我有一个输入字段。请注意,CSRF令牌也需要在表格中(google laravel csrf_field这意味着什么)。<input type="file" name="upload">

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class Upload extends FormRequest
{
  ...
  ...
  public function rules() {
    return [
      'upload' => 'required|file|max:8192',
    ];
  }
  public function messages()
  {
    return [            
      'upload.required' => "You must use the 'Choose file' button to select which file you wish to upload",
      'upload.max' => "Maximum file size to upload is 8MB (8192 KB). If you are uploading a photo, try to reduce its resolution to make it under 8MB"
    ];
  }
}

推荐