Laravel中的文件上传-如果用户尝试上传大文件,则会向用户显示错误

时间:2019-02-20 16:20:03

标签: laravel file upload

在Laravel中,我能够成功地使用户在页面上上传文件,但是我想知道在提交页面之前,是否有办法向该用户显示错误。太大。诸如“您选择上传的文件为25MB。请使其小于20MB。”

有没有可以处理此问题的软件包?

2 个答案:

答案 0 :(得分:1)

在客户端验证文件大小。 (提及这一点是因为您提到要在提交表单之前提醒该错误。) 检查下面使用jQuery的示例代码:

$(document).ready(function() {

    $('input[type="file"]').change(function(event) {
        var fileSize = this.files[0].size;
        var maxAllowedSize = //add your value here;
        // check the file size if its greater than your requirement
        if(size > maxAllowedSize){
          alert('Please upload a smaller file');
          this.val('');
        }

    });
});

服务器端的验证(您可以根据要允许的文件类型更改mime类型):

<?php 

public function store(Request $request){

    $request->validate([
        'file_input_name' => 'file|max:25000|mimes:jpeg,bmp,png',
        // add validations for other fields here
    ]);
}

有关更多信息,请检查documentation

答案 1 :(得分:0)

您不需要包即可执行此操作,可以创建Request类或使用验证器:

1。创建一个Request类:

运行命令php artisan make:request FileRequest

然后,在App\Http\Requests\FileRequest下生成的文件上执行以下操作:

  • 更改authorize方法以返回true而不是false
  • rules方法下,您返回验证规则:

return [ "file_input" => "max:20480", //If your input type's file name is "file_input" ];

根据documentationmax rule验证用户输入的文件大小不会超过指定的千字节数。

2。您还可以在控制器方法中创建验证器:

use Validator;

public function store(Request $request)
    {
        $validator = Validator::make($request->only('file_input'), [
            'file_input' => 'max:20480',
        ]);

        if ($validator->fails()) {
            return redirect()
                        ->route('your.route.name')
                        ->withErrors($validator)
                        ->withInput();
        }

        // other code here
    }