【问题标题】:Laravel Call to undefined method Intervention\Image\File::delete()Laravel 调用未定义的方法 Intervention\Image\File::delete()
【发布时间】:2017-11-24 08:07:40
【问题描述】:

我做了一个方法,允许用户更新他们的个人资料图片。我还添加了一个功能,如果他们更新到新的个人资料图片,它会删除他们的旧个人资料图片。但我收到一条错误消息,提示 Call to undefined method Intervention\Image\File::delete()

这是什么原因造成的?在下面的代码中,它对我来说非常有意义。我希望你们能提供帮助。提前致谢

代码: 用户控制器.php

public function update_avatar(Request $request) {

    $this->middleware('auth');

    if ($request->hasFile('avatar')) {
        $avatar = $request->file('avatar');
        $filename = Auth::user()->username . time() . '.' . $avatar->getClientOriginalExtension();
        Image::make($avatar)->fit(300,300)->save( public_path('/uploads/avatars/' . $filename));

        $user = Auth::user();
        $user->avatar = $filename;
        $user->save();

        //Verwijderd vorige foto
        if ($user->avatar != 'default.jpg') {
            $path = 'uploads/avatars/';
            $lastpath = Auth::user()->Avatarpath;
            File::delete(public_path($path . $lastpath));
        }
    }

    return view('user.profile', array('user' => Auth::user()));

路线:Route::post('{username}/profile', 'UserController@update_avatar');

应该执行此操作的表单。

<div class="row">
        <div class="col l12 m12 s12">
            <div class="card">
                <div class="card-content">
                    <form enctype="multipart/form-data" action="profile" method="POST">
                        <input type="file" name="avatar">
                        <input type="hidden" name="_token" value="{{ csrf_token() }}">
                        <input type="submit" class="pull-right btn btn-primary" value="Change profile">
                    </form>
                </div>
            </div>
        </div>
    </div>

更改图片效果很好。如果我重新加载页面,个人资料图片会更新,但不会删除旧的。

【问题讨论】:

  • 尝试打印 $lastpath 以查看它是否包含 / infront 然后您需要将其删除,否则在连接 'uploads/avatars//someath 时会发生
  • @Exprator 我在定义 $lastpath 的代码之后添加了一个dd($lastpath),但是在我尝试了 Dharmesh 发送的代码之后,它只是刷新了页面。甚至无需更改个人资料图片

标签: php laravel laravel-5 laravel-5.2


【解决方案1】:

试试这个。这有帮助吗?

 public function update_avatar(Request $request) {

        $this->middleware('auth');

        if ($request->hasFile('avatar')) {
            $avatar = $request->file('avatar');
            $filename = Auth::user()->username . time() . '.' . $avatar->getClientOriginalExtension();
            Image::make($avatar)->fit(300,300)->save( public_path('/uploads/avatars/' . $filename));

            $user = Auth::user();
            $user->avatar = $filename;
            $user->save();

            //Verwijderd vorige foto
            if ($user->avatar != 'default.jpg') {
                 $path = public_path('uploads'.DIRECTORY_SEPARATOR.'avatars'. DIRECTORY_SEPARATOR.Auth::user()->Avatarpath);
                  if (file_exists($path)) {
                    unlink($path);
                  }
            }
        }

        return view('user.profile', array('user' => $user));
    }

【讨论】:

  • 权限被拒绝,所以它与文件夹的权利有关。我该如何改变这个,所以这有效?需要允许该程序更改该文件夹内的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
相关资源
最近更新 更多