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

Jim*_*ers 34 php validation laravel

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

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

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

我试过这个:

'file' => 'size:>=500'
'file'  => 'size:max:500'
Run Code Online (Sandbox Code Playgroud)

文档没有说明这一点:

大小:值

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

Fil*_*ski 81

根据文件:

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

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

  • 好吧......如果它是以千字节为单位的文档说明,它应该是max:10000 10 MB.否则,文档应将大小称为Kibibytes或KiB (7认同)
  • 这个解决方案对我不起作用。系统上传了 6.5 MB 的图像。代码为 $validator = Validator::make($request->all(), [ 'profile_image'=>'mimes:jpeg,jpg,png|max:2000' ]); (2认同)

NUL*_*ter 6

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

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

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

在 resources/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"
    ];
  }
}
Run Code Online (Sandbox Code Playgroud)