مانی
4 سال پیش توسط مانی مطرح شد
3 پاسخ

حذف فایل تصویر در لاراول

سلام وقت بخیر
من یک قسمتی رو ایجاد کردم که داخل اون دوره های آموزشی قرار بدم و برای تصاویر هم از پکیج
composer require intervention/image
استفاده کردم و الان تصاویر من در پایگاه داده به این صورت ذخیره میشه

{"images":{"original":"upload\/images\/2020\/9\/1599161237.elearning-bg.png","300":"upload\/images\/2020\/9\/300_1599161237.elearning-bg.png","600":"upload\/images\/2020\/9\/600_1599161237.elearning-bg.png","900":"upload\/images\/2020\/9\/900_1599161237.elearning-bg.png"},"thumb":"upload\/images\/2020\/9\/300_1599161237.elearning-bg.png"}

تا اینجا مشکلی نیست تصاویر با سایز هایی که مشخص کردم ذخیره میشه

اما الان وقتی دوره رو پاک می کنم تصاویر از داخل پوشه آپلود پاک نمیشه

اومدم و از unlink میخواستم استفاده کنم ولی نشد

چه راهکاری میتونید بگید که فایل تصاویر بعد از پاک شدن دوره اون ها هم پاک بشه

اینم قسمت Controller

    /**
     * Remove the specified resource from storage.
     *
     * @param Course $course
     * @return Application|RedirectResponse|Redirector
     */
    public function destroy(Course $course)
    {

        $course->delete();

        return redirect(route('admin.courses.index'));
    }
}

ثبت پرسش جدید
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

سلام ابتدا باید ببینید شما تصاویر رو در کدوم مسیر آپلود کردین اگر در مسیر storage آپلود کردین از فساد storage و متد delete برای حذف استفاده نمایید , اگر در مسیر public ذخیره کردین از فساد File و متد delete برای حذف استفاده کنید داخل کنترلرتون بعد از حذف course تصاویرو حذف کنید.


مانی
@mani.h1990 4 سال پیش مطرح شد
0

من تصاویر رو در پوشه
Public/upload/images
آپلود کردم که البته بعد از این قسمت دو پوشه دیگه هم داره که بصورت خودکار ساخته میشه به نام‌های
Year/month
بعد فایل مورد نظر
آدرس کامل به اینصورت هست
مثلا
Public/upload/images/2020/9/
و اسم فایل

من به صورت نوشتم نشد

        $ImageFile = $course->images;
        File::delete($ImageFile);
        $course->delete();

یا

        File::delete($course->images);
        $course->delete();

سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش مطرح شد
0

@mani.h1990 سلام.
روش شما درسته اما روش پاس دادن اطلاعاتتون به متد Delete مشکل داره . متد delete سه حالت مختلف میتونه داشته باشه :
حذف یک تک فایل:

File::delete($filename);

حذف چند فایل:

File::delete($file1 , $file2 , $file3);

حذف آرایه ای از فایل ها:

$files = [$file1, $file2];
File::delete($files);

عملا اینجا شما دارین از روش سوم استفاده میکنید اما ساختار آرایه شما مشکل داره . باید آرایه رو جوری پاس بدید که هر پارامتر آدرسی از یک فایل هست . شما آرایه تو در تو دارین و این مشکل سازه . باید آرایه رو به این صورت تبدیل کنید(در واقع هر عنصر آرایه یک آدرس از فایل برای حذف شدن) :

$filesAddresses = [
            "upload\/images\/2020\/9\/1599161237.elearning-bg.png",
            "upload\/images\/2020\/9\/300_1599161237.elearning-bg.png",
            "upload\/images\/2020\/9\/600_1599161237.elearning-bg.png",
            "upload\/images\/2020\/9\/900_1599161237.elearning-bg.png"
        ];

یا اینکه با توجه به ساختاری که از دیتابیستون میگیرید ( ممکنه serialize کنید یا هر مدل دیگه ای ) میتونید حلقه بزنید و داخل حلقه foreach تک تک فایل ها رو حذف کنید.
امیدوارم کمک کننده باشه . موفق باشید


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

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