【问题标题】:Laravel File Upload ValidationLaravel 文件上传验证
【发布时间】:2014-06-30 19:08:55
【问题描述】:

我是 Laravel 的新手。我有一个带有文件上传功能的表单。我如何验证他们的文件?我只允许 Microsoft Word 文件。这是我的验证码。

我只想检查他们是否插入了 ms word 文件,如果没有,则不会被处理。

public function store()
{
  // Validate
    $rules = array(
        'pda'                         => 'required|unique:forms',
        'controlnum'                  => 'required|unique:forms',
        'date'                        => 'required',
        'churchname'                  => 'required',
        'title'                       => 'required',
        'pastorname'                  => 'required',
        'contactnum'                  => 'required',
        'address'                     => 'required',
        'state'                       => 'required',
        'region'                      => 'required',
        'area'                        => 'required',
        'city'                        => 'required',
        'zipcode'                     => 'required|numeric|max:9999',
        'tgjteachertraining'          => 'required',
        'localcontact'                => 'required',
        'tgjdatestart'                => 'required',
        'tgjdateend'                  => 'required',
        'tgjcourse'                   => 'required|numeric',
        'childrengraduated'           => 'required|numeric|max:450',
        'childrenacceptjesus'         => 'required|numeric',
        'howmanycomitted'             => 'required|numeric',
        'recievedbibles'              => 'required|numeric',
        'descgradevent'               => 'required',
        'whatwillyoudo'               => 'required',
        'pastortest'                  => 'required',
        'teachertest'                 => 'required',
        'childrentest'                => 'required',
        'file'                        => 'required|max:10000',
    );

    $validator = Validator::make(Input::all(), $rules);

    // process the form
    if ($validator->fails()) {
        return Redirect::to('forms/create')->withErrors($validator);
    } else {
        // store
        $forms = new Forms;
        $forms->pda                         = Input::get('pda');
        $forms->controlnum              = Input::get('controlnum');
        $forms->date                = Input::get('date');
        $forms->churchname                  = ucwords(Input::get('churchname'));
        $forms->title                       = ucwords(Input::get('title'));
        $forms->pastorname                  = ucwords(Input::get('pastorname'));
        $forms->address                     = Input::get('address');
        $forms->contactnum                  = Input::get('contactnum');
        $forms->state                       = Input::get('state2');
        $forms->region                      = Input::get('region2');
        $forms->area                        = Input::get('area2');
        $forms->citytown                    = Input::get('city2');
        $forms->zipcode                     = Input::get('zipcode');
        $forms->tgjteachertraining          = Input::get('tgjteachertraining');
        $forms->localcontact            = ucwords(Input::get('localcontact'));
        $forms->tgjdatestart            = Input::get('tgjdatestart');
        $forms->tgjdateend              = Input::get('tgjdateend');
        $forms->tgjcourse           = Input::get('tgjcourse');
        $forms->childrengraduated           = Input::get('childrengraduated');
        $forms->childrenacceptjesus     = Input::get('childrenacceptjesus');
        $forms->howmanycomitted         = Input::get('howmanycomitted');
        $forms->recievedbibles          = Input::get('recievedbibles');
        $forms->descgradevent           = Input::get('descgradevent');
        $forms->whatwillyoudo           = Input::get('whatwillyoudo');
        $forms->pastortest          = Input::get('pastortest');
        $forms->teachertest             = Input::get('teachertest');
        $forms->childrentest            = Input::get('childrentest');
        $file                   = Input::file('file');
        $filename                   = $file->getClientOriginalName(); 
        $destinationPath                = 'uploads/'.Input::get('pda');
        $uploadSuccess              = Input::file('file')->move($destinationPath, $filename);
        $forms->docurl              = 'uploads/'.Input::get('pda').'/'.$filename;
        if( $uploadSuccess ) {
        $forms->save();
        //Session::flash('message', 'Successfully submitted form!');
        return Redirect::to('forms/create'); 
        Session::flash('message', 'Successfully submitted form!');

        } 
        else {
        return Response::json('error', 400);
        }
    }
}

【问题讨论】:

    标签: php validation laravel mime-types


    【解决方案1】:

    试试这个?

    'file' => 'required|max:10000|mimes:application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    

    您可能希望为响应设置一些自定义消息:)

    【讨论】:

      【解决方案2】:

      要在 Laravel 中验证文件输入的 mime 类型,您可以使用 mimes 规则。请记住将检测到的 mime 类型与您提供的文件的实际 mime 匹配。在不同的服务器上可能会有所不同。

      例如,您要在表单中启用添加和word文档:

      1) 在config/mimes.php 中添加以下mime 类型:

          'doc'  => array('application/msword', 'application/vnd.ms-office'),
          'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'), 
      

      2) 在您的验证$rules 中添加以下元素:

          'file' => 'required|max:10000|mimes:doc,docx' //a required, max 10000kb, doc or docx file
      

      【讨论】:

      • 是的,创建它并以与其余配置文件类似的方式填充,作为键数组。至于钥匙 - 这就是我在回答中包含的内容:)
      • 您好,谢谢!我照你说的做了,并按照这个github.com/jasonlewis/laravel.com/blob/master/application/…但我仍然得到错误:
      • LogicException 无法猜测 mime 类型,因为没有可用的猜测器(您是否启用了 php_fileinfo 扩展?)
      • 看来您的服务器配置不足,您缺少一些 MIME 类型检测所需的扩展?您的 HTTP 服务器堆栈和操作系统是什么?顺便说一句,如果我的回答解决了您最初的问题,请接受它作为官方回答,以便其他人在遇到类似问题时也能受益。干杯!
      • 嗨!我设法让它工作。谢谢!我只是忘记在我的 wamp 服务器中启用一些扩展。谢谢!我给你加分:)
      猜你喜欢
      • 2017-02-12
      • 2023-03-03
      • 2020-11-29
      • 2016-02-25
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多