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

4zcjmb1e  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(188)

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

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

但是这里说文件应该正好是500kb大。我怎样才能编辑这个规则,使它在大于500kb时返回一个错误?
我试过这个:

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

文档对此只字未提:
大小:值
要验证的字段必须具有与给定值匹配的大小。对于字符串数据,该值对应于字符数。对于数值数据,该值对应于给定的整数值。对于文件,大小对应于以KB为单位的文件大小。

bpsygsoo

bpsygsoo1#

根据文件:

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

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

注意,有人试图将1 kilobytes的值从原始的1024更改为1000字节,主要框架(如Laravel)仍然使用原始的1024值,以防止高级开发人员(习惯于1024)混淆。

siotufzp

siotufzp2#

编辑:警告!此答案在我的XAMPP OsX环境中有效,但当我将其部署到AWS EC2时,它并没有阻止上传尝试。
我很想删除这个答案,因为它是错误的,但我会解释是什么绊倒了我

我的文件上传字段名为'upload',所以我得到“The upload failed to upload."。此消息来自validation.php中的这一行:
在resources/lang/en/validaton.php中:
'uploaded' => 'The :attribute failed to upload.',
这是当文件大于PHP设置的限制时显示的消息。
我想覆盖这个消息,通常可以通过向Validator::make()方法传递第三个参数$messages数组来实现。

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

因此,作为一个超级狡猾的黑客,我选择进入我的视图,显示消息,并替换为我的友好的“文件太大”消息的特定消息。
以下是当文件小于PHP文件大小限制时的工作原理:
如果其他人正在使用Laravel FormRequest类,以下是我在Laravel 5.7上的工作:
这是我如何设置自定义错误消息和最大文件大小:
我有一个输入字段<input type="file" name="upload">。注意CSRF令牌也需要在表单中(谷歌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"
    ];
  }
}

相关问题