سلام دوستان.
من قسمت آپلود عکس پروفایل برای کاربر از فانکشن زیر استفاده میکنم.
public function UploadAvatar(Request $request)
{
if($request->hasFile('avatar') && $file = $request->file('avatar'))
auth()->user()->update([
'avatar' => $file->store('uploads/avatars'),
]);
return redirect()->back();
}
حالا میخوام وقتی کاربر عکس جدید آپلود میکنه، عکس قبلی از داخل فولدر public حذف بشه، برای اینکار باید چیکار کنم؟
البته پیش فرض پروفایل هم یک عکس است که در مایگریشن به صورت زیر تعریف کردم.
$table->string('avatar')->default('uploads/avatars/default.jpg');
حالا میخوام دفعه اول اون عکس پیش فرض پاک نشه ولی از دفعات بعد عکس قبلی هم از دیتابیس پاک بشه و هم از فولدر public.
@ali.agk25
این کدی که شما نوشتین فکر کنم مقدار default رو حذف کنه.
من خودم به صورت زیر نوشتم و مشکل حل شد.
public function UploadAvatar(Request $request)
{
if($request->hasFile('avatar') && $file = $request->file('avatar')) {
$image_path = Auth::user()->avatar;
$default = 'uploads/avatars/default.jpg';
if ($default != $image_path) {
File::delete($image_path);
}
auth()->user()->update(['avatar' => $file->store('uploads/avatars')]);
}
return redirect()->back();
}سلام دوست عزیز
if شما میتونست به شکل زیر باشه برای آپلود به نظرم میتونید امتحان کنید چون اگه نول برگردونه که false میشه و اجرا نمیشه
if($file = $request->file('avatar'))
و در مورد تغییر پروفایل هم اول باید فایل قبلی (همون اواتار کاربر) رو از پروژه پاک کنی و بعد فایل جدید رو ذخیره و آدرسش رو داخل دیتا بیس ذخیره کنی
public function UploadAvatar(Request $request)
{
if($file = $request->file('avatar')){
if(File::exists(auth()->user()->avatar)){
File::delete(auth()->user()->avatar));
}
auth()->user()->update([
'avatar' => $file->store('uploads/avatars'),
]);
}
return redirect()->back();
}
یه نمونه سادش میتونه کد بالا باشه
شاید پاسخ شما همینجا باشد
@ali.agk25
بله دقیقا همین کارو کردم.
تشکر بابت وقتی که گذاشتین.
پیروز باشید.