Laravel $请求文件

时间:2016-06-07 13:55:49

标签: file laravel post

$ request file return me exception-“在null上调用成员函数move()”

<form  action="{{url('/addnews')}}" class="reviews-form" role="form" 
<input type="file" name="file">
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
控制器中的

public function AddData(Request $request)
{
$file=$request->file('file');
$file->move('images',$file->getClientOrginalName());
}

2 个答案:

答案 0 :(得分:3)

您的<form>代码需要enctype="multipart/form-data"(以及method="post")。如果没有enctype,请求中不会包含任何文件数据,导致$request->file('file')为空。

在尝试移动文件之前,您还应该检查$request->file('file')是否为文件(Laravel的验证类具有专门针对此的file规则)。您的一些用户肯定会忽略上传文件,并且应该收到有用的验证错误而不是例外。

答案 1 :(得分:3)

  1. 定义方法:POST,你不能使用GET方法发送文件(没有确切定义它充当GET

  2. 定义enctype参数以通知Web服务器您正在发送文件

  3. 修复表单:

    <form  action="{{url('/addnews')}}" method="post" enctype="multipart/form-data" class="reviews-form" role="form">
      <input type="file" name="file">
      <div class="form-group">
        <button type="submit" class="btn btn-primary">Submit</button>
      </div>
    </form>
    

    我希望您在路由器文件中定义POST / addnews 是指您的控制器 addData 操作。

    我建议使用命名路由使您的代码更准确,使其符合惯例。

    从addData =&gt;更改操作名称创建,

    并使您的routes.php文件具有以下内容:

    Route::post('/news', ['as' => 'news.add', 'uses' => 'NewsController@create']);
    

    形式:

    <form  action="{{route('news.add')}}" method="post" enctype="multipart/form-data" class="reviews-form" role="form">
      <input type="file" name="file">
      <div class="form-group">
        <button type="submit" class="btn btn-primary">Submit</button>
      </div>
    </form>