راکت
Armin Rahmati
Armin Rahmati
توسط Armin Rahmati مطرح شد
حل
4 پاسخ

عکس کاربر

سلام دوستان.
من قسمت آپلود عکس پروفایل برای کاربر از فانکشن زیر استفاده میکنم.

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.


ثبت پرسش جدید
Armin Rahmati
Armin Rahmati
@arminrahmati9995 سال پیشمطرح شد
1

@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();
    }

علی قنواتی
علی قنواتی
تخصص :توسعه دهنده وب , لاراول
@aligh5 سال پیشمطرح شد
0

سلام دوست عزیز
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();
    }

یه نمونه سادش میتونه کد بالا باشه


Armin Rahmati
Armin Rahmati
@arminrahmati9995 سال پیشمطرح شد
1

@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();
    }

علی قنواتی
علی قنواتی
تخصص :توسعه دهنده وب , لاراول
@aligh5 سال پیشمطرح شد
0

بله درست میگید دوست عزیز فقط کافیه قبل از حذف کردن چک کنید که اگه با مقدار دیفالت یکی بود حذف انجام نشه


Armin Rahmati
Armin Rahmati
@arminrahmati9995 سال پیشمطرح شد
1

@ali.agk25
بله دقیقا همین کارو کردم.
تشکر بابت وقتی که گذاشتین.
پیروز باشید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام