簡體   English   中英

在 Laravel 5.8 中更新個人資料照片時刪除以前的照片

[英]delete previous photo in updating profile photo in Laravel 5.8

如何在上傳新照片時刪除以前的照片?

這是我的更新頭像功能

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.');
}

編輯:

我將照片存儲在 STORAGE > APP > PUBLIC > AVATARS

這段代碼的作用是,它只會覆蓋之前的照片。 例如,我有我當前的2_avartar.jpg ,如果我用 PNG 擴展文件更新我的照片, 2_avartar.jpg.png在添加2_avartar.jpg時仍將保留。 如果我再次更新 GIF 文件2_avartar.jpg2_avartar.png將保留並添加新的2_avartar.gif 如果您在更新照片之前上傳與您擁有的相同的擴展名,則沒有問題。 我正在尋找的解決方案是在添加新照片之前刪除所有 2_avatar.* 。

提前致謝!

如果您是昨天向我建議這個問題的朋友,請再次發布。 這是我的錯誤,我沒有檢查文件夾名稱。

    $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.');
}

注意兩次保存用戶的原因是,如果存儲文件時出現問題,以免用戶留下指向已刪除圖像的鏈接作為其化身。

您只需要從存儲它的公用文件夾中取消鏈接即可。

 unlink(public_path('/images/profilepics/'.$sortImageName));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM