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

时间:2016-05-25 09:15:15

标签: php validation laravel

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

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

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

我试过这个:

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

文档中没有说明这一点:

  

尺寸:值

     

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

2 个答案:

答案 0 :(得分:68)

根据文件:

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

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

答案 1 :(得分:0)

编辑:警告!这个答案适用于我的XAMPP OsX环境,但是当我将其部署到AWS EC2时,它并不会阻止上载尝试。

我很想删除此答案,因为它很错,但是我会解释是什么使我绊倒了

我的文件上传字段名为“上传”,所以我得到“上传失败上传”。此消息来自validation.php中的这一行:

在resources / lang / zh-CN / validaton.php中:

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

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

我想重写此消息,通常可以通过将第三个参数$ messages数组传递给Validator :: make()方法来做到这一点。

但是我无法做到这一点,因为我是从React组件调用POST的,该组件将渲染包含csrf字段和上载字段的表单。

因此,作为一种超级躲猫猫,我选择进入显示消息的视图,并用友好的“文件太大”消息替换该特定消息。

如果文件小于PHP文件大小限制,则可以使用以下方法:

万一其他人正在使用Laravel FormRequest类,这是在Laravel 5.7上对我有用的东西:

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

我有一个输入字段<input type="file" name="upload">。请注意,CSRF令牌也是以下形式所必需的(这表示Google laravel csrf_field)。

<?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"
    ];
  }
}