在更新Laravel 5.8中的个人资料照片时删除以前的照片

在更新Laravel 5.8中的个人资料照片时删除以前的照片,laravel,upload,photo,Laravel,Upload,Photo,上传新照片时如何删除以前的照片 这是我的更新头像功能 public function update_avatar(Request $request){ $request->validate([ 'avatar' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); $user = Auth::User(); $avatarName = $user->id.'

上传新照片时如何删除以前的照片

这是我的更新头像功能

public function update_avatar(Request $request){

    $request->validate([
        'avatar' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $user = Auth::User();

    $avatarName = $user->id.'_avatar'.'.'.request()->avatar->getClientOriginalExtension();

    $request->avatar->storeAs('avatars',$avatarName);

    $user->avatar = $avatarName;
    $user->save();

    return back()
        ->with('success','You have successfully upload image.');
}
编辑:

我将照片存储在存储>应用>公共>头像上

此代码所做的只是覆盖上一张照片。例如,我有我当前的
2_avartar.jpg
,如果我用PNG扩展文件更新我的照片,
2_avartar.jpg
仍将保留,同时添加
2_avartar.jpg.PNG
。如果我再次更新GIF文件,则会保留
2_avartar.jpg
2_avartar.png
并添加新的
2_avartar.GIF
。如果您在更新照片之前上传相同的分机名,则不会有问题。我正在寻找的解决方案是在添加新照片之前删除所有2_头像。*


提前谢谢

如果你是昨天向我建议这个的朋友,请再发一次。 这是我的错误,我没有检查文件夹名称

    $folder = 'avatar';
    Storage::delete($folder.'/'.$user->avatar); 
同样,答案不是我的,它是昨天回答的,已被删除,因为我认为它不起作用。

您可以尝试以下方法:

public function update_avatar(Request $request)
{
    $folder = 'avatars';

    $request->validate([
        'avatar' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $user = Auth::User();

    if ($user->avatar) {
        Storage::delete($folder . '/' . $user->avatar);
        $user->avatar = null;
        $user->save();
    }

    $avatarName = $user->id . '_avatar' . '.'
     . request()->avatar->getClientOriginalExtension();

    $request->avatar->storeAs($folder, $avatarName);

    $user->avatar = $avatarName;
    $user->save();

    return back()
        ->with('success','You have successfully upload image.');
}

注意:保存用户两次的原因是,如果存储文件时出现问题,那么用户就不会保留指向已删除图像的链接作为其化身。

为什么不起作用?如果它已经知道文件名的话,那肯定能用。啊,我现在可以看到了。$folder值应为“avatars”。如果你是昨天提出这个答案的朋友,请告诉我,$folder='avatar';存储::删除($folder.'/'.$user->avatar);再次发布你的问题。这是我的错误。我没有检查文件夹名。