【问题标题】:How to Validate on Max File Size in Laravel?如何在 Laravel 中验证最大文件大小?
【发布时间】:2016-09-22 19:01:17
【问题描述】:

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

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

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

我试过这个:

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

文档对此只字未提:

大小:值

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

【问题讨论】:

  • 使用 **file' => 'size:500' ** 。即文件大小不大于 500kb
  • @YasinPatel 你错了,size 验证是正确的值

标签: php validation laravel


【解决方案1】:

根据the documentation

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

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

【讨论】:

  • 嗯...如果它以千字节为单位,如文档所述,它应该是 max:10000 for 10 MB。否则,文档应将大小称为 Kibibytes 或 KiB
  • The value is in kilobytes. I.e. max:10240 = max 10 MB. 所以这意味着'file' => 'max:1' 意味着1 KB?
  • 如果值已经以千字节为单位,那么它应该只是 10000,1024 乘数仅适用于从位到字节的情况。
  • 这个解决方案对我不起作用。系统上传 6.5 MB 图片。代码是 $validator = Validator::make($request->all(), [ 'profile_image'=>'mimes:jpeg,jpg,png|max:2000' ]);
  • max 属性文档laravel.com/docs/8.x/validation#rule-max 提到它的功能与 size 相同,而 size 文档 laravel.com/docs/8.x/validation#rule-size 则以千字节为单位。
【解决方案2】:

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

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

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

在资源/lang/en/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"
    ];
  }
}

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 2020-04-30
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2020-05-23
    • 2014-11-19
    • 2017-07-09
    相关资源
    最近更新 更多