Armin Rahmati
4 سال پیش توسط 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
@arminrahmati999 4 سال پیش مطرح شد
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();
    }

علی قنواتی
تخصص : توسعه دهنده وب , لاراول
@aligh 4 سال پیش آپدیت شد
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
@arminrahmati999 4 سال پیش مطرح شد
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();
    }

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

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


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

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


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

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