Laravel通过另一个URL上传图像并将其存储在数据库中

时间:2015-05-09 17:15:13

标签: php mysql laravel

我想通过Laravel上传(和更新)图片。

我希望我的数据库中的现有图像名称被新的替换。

所以我在控制器中有这个:

public function UpdatePic()
    {
        $rules = array(
            'image' => 'required',
            );

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

        //process the storage
        if ($validator->fails())
        {
            Session::flash('error_message', 'Fout:' . $validator->errors());
            return Redirect::to('admin/user#tab_2-2')->withErrors($validator);
        }else{

            //define the new random generated string for imagename
            $imagename = str_random(40) . '.' . Input::file('image')->getClientOriginalName();
            //store
            $userimg            = UserImage::find(1);
            $userimg->img       = $imagename;
            $userimg->save();

            //save the image
            $destinationPath = 'public/img/user_img';

            if (Input::hasFile('img'))
            {
                $file = Input::file('img');
                $file->move('public/img/user_img', $imagename);
            }
            //redirect
            Session::flash('success', 'Uw afbeelding is succesvol veranderd!');
            return Redirect::to('admin/user#tab_2-2');

        }
    }

问题是,当我得到这个时,我收到了这个错误:

  

从空值创建默认对象

我有一个如下所示的邮政路线:

Route::post('updateuserpic', 'UserController@UpdatePic');

所以我的观点如下:

{{ Form::open(array('url' => 'admin/updateuserpic', 'files' => true)) }}
                                                    <div class="form-group">
                                                        <div class="fileinput fileinput-new" data-provides="fileinput">
                                                            <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
                                                                <img src="http://www.placehold.it/200x150/EFEFEF/AAAAAA&amp;text=Geen+afbeelding" alt=""/>
                                                            </div>
                                                            <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">
                                                            </div>
                                                            <div>
                                                                <span class="btn default btn-file">
                                                                    <span class="fileinput-new">
                                                                         Selecteer een afbeelding
                                                                    </span>
                                                                    <span class="fileinput-exists">
                                                                         Verander
                                                                    </span>
                                                                    {{ Form::file('image') }}
                                                                </span>
                                                                <a href="#" class="btn red fileinput-exists" data-dismiss="fileinput">
                                                                     Verwijder
                                                                </a>
                                                            </div>
                                                        </div>
                                                        <div class="clearfix margin-top-10">
                                                            <span class="label label-danger">
                                                                 waarschuwing!
                                                            </span>
                                                            <span>
                                                                 Dit is enkel ondersteund in de laatste versies van Firefox, Chrome, Opera, Safari and Internet Explorer 10!
                                                            </span>
                                                        </div>
                                                    </div>
                                                    <div class="margin-top-10">

                                                        {{ Form::submit('Opslaan', array('class' => 'btn green')) }}

                                                        <a href="{{ Config::get('app.url') }}/admin/user#tab_2-2" class="btn default">
                                                             Annuleer
                                                        </a>
                                                    </div>
                                                {{ Form::close() }}

我的班级只有这个东西:

<?php

class UserImage extends Eloquent{

    protected $table = 'user_image';

    public $timestamps = false;

}

我认为图片消失是因为我使用了这条路线,但我不知道如何解决它...它没有将图像存储在文件夹中而且它没有&#39 ; t将随机名称存储在数据库中..

谢谢大家!

最诚挚的问候,

罗宾

2 个答案:

答案 0 :(得分:4)

尝试:

validator::make(Input::file('image'), $rules);

并将输入从img更改为image:

        if (Input::hasFile('image'))
        {
            $file = Input::file('image');
            $file->move('public/img/user_img', $imagename);
        }

还要编辑数据库中的数据,执行:

 UserImage::find(1)->update(['img' => $imagename]); 

无需打开对象

你的路线也应该是

Route::post('admin/updateuserpic', 'UserController@UpdatePic');
在你的刀片中

{{ Form::open(array('url' => 'admin/updateuserpic','method' => 'post' ,'files' => true)) }}

更新评论

$file = array('image' => Input::file('image');
validator::make($file , $rules);
TBH,我认为你的代码不应该如此复杂。您的路线很好,请尝试将您的控制器更改为:

<?php

 public function UpdatePic(){

//first, I'll just do the file validation
$validator =  Validator::make(array( 'image' => Input::file('image')), 
                                array('image' => 'required|image'));


if($validator->fails()){

        //return error code
        Session::flash('error_message', 'Fout:' . $validator->errors());
        return Redirect::to('admin/user#tab_2-2')->withErrors($validator);

    }else{

        //update the image name
        $imageName = str_random(40) . '.' . Input::file('image')->getClientOrignalName();

        //store
        UserImage::find(1)->update(['img' => $imageName]);

        //now move that image to the new location
        $file = Input::file('image');
        $file->move('public/img/user_img/', $imageName);

        //now we have done, lets redirect back
        Session::flash('success', 'Uw afbeelding is succesvol veranderd!');
        return Redirect::to('admin/user#tab_2-2');

            }
 }

?>

答案 1 :(得分:0)

我使用原始PHP作为工作

{{1}}