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

حذف عکس از فولدر public

سلام به همه دوستان.
من تو سایتم یه قسمت دارم که کاربر میتونه مشخصات یک ملک رو به همراه 3 عکس وارد کنه.
حالا میخوام وقتی کاربر تصمیم گرفت ملک رو حذف کنه، عکس های اون ملک هم از فولدر public حذف بشن، ولی مشکلی که هست اینه که اگر کاربر فقط یک عکس واسه ملک انتخاب کنه با استفاده از دستورات زیر عکس از فولدر public حذف میشه ولی اگه 2 یا 3 عکس انتخاب کنه، وقتی ملک رو حذف میکنه فقط از دیتابیس حذف میشه و عکس ها داخل فولدر public باقی میمونه.

public function destroy(int $index)
    {
        $estate = Estate::where('id', $index)->first();
        $year = Carbon::now()->year;
        if (File::exists(public_path("uploads/estates/{$year}/{$estate->images}")))
            File::delete(public_path("uploads/estates/{$year}/{$estate->images}"));
        $estate->delete();
        return redirect()->back();
    }

ممنون میشم راهنمایی کنید.


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

این قسمتو میبینی متغییر $destinationPath رو به ابتدای نام فایل ها چسبوندم که مسیر کامل در جدول سیو بشه.

$destinationPath = "uploads/estates/{$year}/";

        $images = array();
        if ($files = $request->file('image1')) {
                $filename = $files->getClientOriginalName();
                $rnd = random_int(1, 1000);
                $files->move(public_path($destinationPath), $rnd . $filename);
                $images[] = $destinationPath. $rnd . $filename;
        }

        if ($files = $request->file('image2')) {
                $filename = $files->getClientOriginalName();
                $rnd = random_int(1, 1000);
                $files->move(public_path($destinationPath), $rnd . $filename);
                $images[] = $destinationPath . $rnd . $filename;
        }

        if ($files = $request->file('image3')) {
                $filename = $files->getClientOriginalName();
                $rnd = random_int(1, 1000);
                $files->move(public_path($destinationPath), $rnd . $filename);
                $images[] = $destinationPath . $rnd . $filename;
        }

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش آپدیت شد
0

فکر کنم شما آدرس ها رو به صورت یک رشته با که علامت | از هم جدا شده اند ذخیره میکنید.
هنگام حذف بیایید اون رشته رو با explode تبدیل به آرایه کنید و در یک حلقه تک تک تصاویرو حذف کنید

 public function destroy(int $index)
    {
        $estate = Estate::where('id', $index)->first();
     $images = $estate->images;
        $paths = explode('|', $images);
        foreach ($paths as $path) {
            if (File::exists(public_path($path)))
                File::delete(public_path($path));
        }

        $estate->delete();
        return redirect()->back();
    }

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

uploads/estates/2020/image1.jpg|uploads/estates/2020/image2.jpg|uploads/estates/2020/image3.jpg

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


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

این قسمتو میبینی متغییر $destinationPath رو به ابتدای نام فایل ها چسبوندم که مسیر کامل در جدول سیو بشه.

$destinationPath = "uploads/estates/{$year}/";

        $images = array();
        if ($files = $request->file('image1')) {
                $filename = $files->getClientOriginalName();
                $rnd = random_int(1, 1000);
                $files->move(public_path($destinationPath), $rnd . $filename);
                $images[] = $destinationPath. $rnd . $filename;
        }

        if ($files = $request->file('image2')) {
                $filename = $files->getClientOriginalName();
                $rnd = random_int(1, 1000);
                $files->move(public_path($destinationPath), $rnd . $filename);
                $images[] = $destinationPath . $rnd . $filename;
        }

        if ($files = $request->file('image3')) {
                $filename = $files->getClientOriginalName();
                $rnd = random_int(1, 1000);
                $files->move(public_path($destinationPath), $rnd . $filename);
                $images[] = $destinationPath . $rnd . $filename;
        }

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

@hosseinshirinegad98
تشکر از شما.
مرسی بابت وقتی که گذاشتین.


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

خواهش می کنم.


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

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