راکت
حل شده

عکس کاربر

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.

ثبت پرسش جدید

پاسخ‌ها

4
Armin Rahmati
Armin Rahmati
@arminrahmati999
بهترین پاسخ

@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();
    }
علی قنواتی
علی قنواتی
@aligh

تخصص: توسعه دهنده وب , لاراول

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

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

علی قنواتی
علی قنواتی
@aligh

تخصص: توسعه دهنده وب , لاراول

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

شاید پاسخ شما همین‌جا باشد

Armin Rahmati
Armin Rahmati
@arminrahmati999

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

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

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