在laravel 4中无法上传图片

时间:2015-02-03 00:50:26

标签: php laravel-4 image-uploading

我有这个基本形式:

{{ Form::open(array('url' => URL::route('post-account-changeProfilePic'), 'files' => true, ))}}
{{ Form::file('photo') }}
<br />
{{ Form::submit('Regístrarme', array("class" => "button expand round")) }}
{{ Form::close() }}

我的路线位于两组中:before=>Authbefore=>csrf

Route::post('/accont/changeProfilePic', array(
    'as'    => 'post-account-changeProfilePic',
    'uses'  =>  'CallCenterController@postChangeProfilePic'
));

在我的控制器中,我只是转储我的变量以查看我得到的内容:

public function postChangeProfilePic(){
    $input = Input::all();
    var_dump($input);
}

这些是我得到的错误:

1- Illuminate \ Session \ TokenMismatchException。

这是因为csrf过滤器,但由于我使用的是刀片,因此令牌实际存在。此外,如果我从文件输入中删除name属性,则不会显示此错误。

到目前为止,我决定将路径放在csrf过滤器之外,直到我理解发生了什么为止。

2-将路径放出csrf过滤器后,尝试显示所有输入,我得到一个null数组。

我决定添加一个新的文字字段,如果我不选择照片/图片并且只发送这样的表格,它会在屏幕上转储所有输入,但当然,文件是空/ null。

对我做错了什么的想法?

2 个答案:

答案 0 :(得分:0)

在您的表单中尝试将其更改为 数组(&#39;之前&#39; =&gt;&#39; csrf&#39;),function()

{{ Form::open(array('url' => URL::route('post-account-changeProfilePic'), 'before' => 'csrf'), 'files' => true, ))}}

默认情况下,csrf令牌应该在那里,因为您正在执行POST请求,所以不确定那里存在问题。

http://laravel.com/docs/4.2/html#csrf-protection

输入尝试

public function postChangeProfilePic(){

    if (Input::hasFile('photo'))
    {
        $input= Input::file('photo');
        var_dump($input);
    }
}

http://laravel.com/docs/4.2/requests#files

答案 1 :(得分:0)

好吧,我认为可能是这个

变化

{{ Form::open(array('url' => URL::route('post-account-changeProfilePic'),
                        'files' => true, ))}}

{{ Form::open(array('route' => 'post-account-changeProfilePic',
                        'files' => true )) }}

我认为你不需要&#39;&#39;在真实的结尾。