【问题标题】:unlink image only if exists in laravel仅当存在于 laravel 中时才取消链接图像
【发布时间】:2020-10-30 03:59:39
【问题描述】:

更新用户图像时,如果存在,请从公用文件夹中取消链接图像,否则请使用图像更新用户。目前我没有用户图像。在从个人资料部分更新用户时,我收到此错误 unlink('images/users') is a directory。我想如果用户存在图像然后取消链接图像并上传新图像,否则只需上传新图像。

我的控制器:

public function changeUserImage(Request $request)
    {
        $this->validate($request, [
            'image' => 'required|mimes:jpeg,jpg,png|max:10000',
        ]);
        $image = $request->file('image');
        if (isset($image)) {
            $imageName = time() . '.' . $request->image->getClientOriginalExtension();
            if (!file_exists('images/users')) {
                mkdir('images/users', 0777, true);
            }
            if (file_exists('images/users')){
                unlink('images/users/' . \auth()->user()->image);
                $image->move('images/users', $imageName);
                User::find(\auth()->user()->id)->update(['image'=>$imageName]);
            }else if (!file_exists('images/users')){
                $image->move('images/users', $imageName);
                User::find(\auth()->user()->id)->update(['image'=>$imageName]);
            }
        }
        return redirect()->back();
    }

【问题讨论】:

    标签: laravel


    【解决方案1】:

    试试这个。我还没有测试它。如果您有任何问题,请告诉我。

    确保导入文件:use File;

    更新

    public function changeUserImage(Request $request)
    {
        $this->validate($request, [
            'image' => 'required|mimes:jpeg,jpg,png|max:10000',
        ]);
        // Let get the current image
        $user = Auth::user();
        $currentImage = $user->image;
        // Let compare the current Image with the new Image if are not the same
        $image = $request->file('image');
        // The Image is required which means it will be set, so we don't need to che isset($image)
        if ($image != $currentImage) {
          // To make our code cleaner let define a directory for DRY code
            $filePath = public_path('images/users/');
            $imageName = time() . '.' . $request->image->getClientOriginalExtension();
            if (!File::isDirectory($filePath)){
                File::makeDirectory($filePath, 0777, true, true);
            }
            $image->move($filePath, $imageName);
            // After the Image has been updated then we can delete the old Image if exists
            if (file_exists($filePath.$currentImage)){
                @unlink($filePath.$currentImage);
            }
        } else {
          $imageName = $currentImage;
        }
        //  SAVE CHANGES TO THE DATA BASE
        $user->image = $imageName;
        $user->save();
        
        return redirect()->back();
    }
    

    【讨论】:

    • 图片存储在 images/users 文件夹中,但不保存在数据库中。
    • 试试这个Auth::user()->update(['image'=>$imageName]); 而不是User::find(\auth()->user()->id)->update(['image'=>$imageName]);
    • 仍未存入数据库
    • 感谢 livreson 成功了。但是为什么更新方法不起作用??
    • 我不知道为什么,但你可以试试$user->update([ 'image' => $imageName']);。我并没有真正使用这种方法。
    【解决方案2】:

    要存储图像:$request->image->storeAs('images/users/', $file_name);

    删除图片:Storage::delete('images/users/'. $file_name);

    【讨论】:

    • 我收到此错误 unlink(images/users/): Is a directory。我把这段代码放在哪里?
    • 没错,你必须传递文件名。
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多