[英]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.jpg
和2_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.