راکت

آپدیت عکس در لاراول

13 پاسخ

سلام دوستان من وقتی میخام عکس مقاله هامو اپدیت کنم عکس بدرستی اپدیت میشه ولی میخام عکس جدید که اپدیت شد عکس قبلی از توی مسیر پروژم حذف بشه برای اینکار باید چکار کنم توی جدول ارتیکل ها فیلدی دارم به اسم images کدهای مربوط به اپلود عکس رو توی یه کنترلر دیگه نوشتم در پایین کدهای کنترلر آرتیکل قسمت اپدیت و کد های کنترلر image قسمت اپلود عکس رو میذارم کسی راهنماییم کنه ممنون میشم
توضیح تصویر رو وارد کنید

توضیح تصویر رو وارد کنید

ثبت پرسش جدید

پاسخ‌ها

13
وحید
وحید
@forughi.vahid

تخصص: Fullstack

@mehrdadroshanraee69
برای پاک کردن فایل میتونید از این کد استفاده کنید.

unlink(path_to_file);
یا
Storage::delete(file);
برای پاک کردن دایرکتوری
rmdir(path_to_folder);

اگر میخواید چند فایل رو با هم پاک کنید یا نام دقیق فایل رو ذخیره ندارید میتونید از کد زیر استفاده کنید.

foreach (glob( path_to_file )) as $filename) {
     unlink($filename);
}

glob( pathtofile ) یک آرایه از تمام فایل ها بر میگردونه . جای pathtofile مسیر فایلتون رو مشخص می کنید که میتونه با استفاده از به چند فایل اشاره داشته باشه مثلا user1. فایل های user1.png و user1.jpg و هر فایل دیگه ای که از فرمت پیروی میکنن به شما بر میگردونه
unlink هم فایل رو پاک میکنه.

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلام
اگر با آپلود عکس جدید می خوای عکس قبلی حذف بشه ابتدا شما با دستور

unlink($article->images)
$article->images= 'new path image'

تصویر قبلی رو حذف کن بعد مجدد مسیر عکس جدیدو در فیلد images قرار بده.
البته اگر مقاله شما تک تصویری باشه.
@mehrdadroshanraee69

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

مهرداد
مهرداد
@mehrdadroshanraee69

@hosseinshirinegad98
@forughi.vahid

توی متد اپدیت این دستوراتی که فرمودید رو بنویسم؟ من کئ مروبط به اپلود عکس رو عرض کردم البته توی کنترلر جداگانه ای نوشتم و کنترلر article رو extend کردم از اون کنترلر مربوط به اپلود عکس

وحید
وحید
@forughi.vahid

تخصص: Fullstack

@mehrdadroshanraee69
هر جایی که میخواید تصویر جدید رو ذخیره کنید قبلش این کد رو بزارید تا تصویر قبلی پاک بشه ،
در مورد کنترلر هایی که نوشتید اگر بفرمایید هدفتون از این extend کردن و جدا کردن این کنترلر ها دقیقا چی بوده بهتر میتونم راهنماییتون کنم

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

دوست عزیز پس این حرف شما

 من وقتی میخام عکس مقاله هامو اپدیت کنم عکس بدرستی اپدیت میشه

چه معنی ای میده؟ یعنی شما میخوای عکس جدیدی آپلود کنی دیگه. غیر از اینه مگه؟
هر کجا خواستی آپلود انجام بدی قبل آپدیت شدن مقاله تصویر فعلیشو با دستورات بالا حذف کن مقدار جدیدو ست کن.
@mehrdadroshanraee69

مونا فرزام
مونا فرزام
@mn.farzam

این لینک رو ببینید
به دردتون میخوره
https://www.kelidestan.com/keys/keys.php?key=453

مهرداد
مهرداد
@mehrdadroshanraee69

@forughi.vahid
دوست عزیز فقط با این هدف که ArticleController کدهای کمتر و خواناتری داشته باشه برای همین کدهای مربوط به اپلود ایمیج رو بردم توی کنترلر جداگانه بنظرتون این کار بنده کار اصولی نبوده؟

مهرداد
مهرداد
@mehrdadroshanraee69

@hosseinshirinegad98
عکس به درستی اپدیت میشه و توی دیتابیس هم ذخیره میشه اما توی مسیر ذخیره عکس توی پروژه عکس های قبلی هم هست میخام اون عکسهای قبلی دیگه پاک شه وقتی عکس جدید اپلود شده چون دیگه نیازی به اون عکس های قبلی ندارم توی فایل پروژه باشه

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

خوب من هم همینو دارم به شما میگم. شما باید پیش از اینکه مقدار جدیدی در فیلد images قرار بدی ابتدا به وسیله مقدار فیلد images تصویر قبلی رو حذف کنی بعد مقدار جدیدی در همون لحظه در فیلد images قرار بدی.
ضمنا کدهای آپلود عکسو بردی در یک کنترلر دیگه، کار اصولی ای نیست یا میتونی براش helpers درست کنی یا اینکه در مدل Article این آپلودو انجام بدی یا در همون کنترلر آرتیکل یک متد برای آپلود تصویر بسازی. کنترلر دیگه کار اشتباهی است و گیج کنندست.
@mehrdadroshanraee69

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

من کدهاشو براتون نوشتم

  // متد آپدیت آرتیکل
    public function update(Request $request, Article $article)
    {
        // ابتدا وجود فایل باید برسی بشه که آیا اقدام به آپدیت تصویر کرده این
        if ( $request->hasFile( 'image' ) )
        {
            unlink($article->images); // ابتدا فایل قبلی در مسیرش حذف میشود
            // سپس تصویر جدید آپلود شده و مسیرش برگشت داده میشود و در فیلد images قرار میگیرد
            $article->images = $this->uploadFile($request->file('image'));
        }
        //... ادامه کدهای آپدیت مقاله
        //در نهایت مقاله آپدیت میگردد
        $article->update();
        return redirect()->back(); // این مسیر فرضی هست شما هر جا دوست داشتی ریدایرکت کن. و تمام
    }

    // متد جداگانه برای آپلود تصویر در همان کنترلر آرتیکل
    public function uploadFile(UploadedFile $file)
    {
        $path = 'مسیری که باید تصویر ذخیره بشه';
        $fileName = Str::random(50); // یک نام جدید برای فایل درست می کنی.
        $fileName = $fileName. '.'. $file->getClientOriginalExtension(); // پسوند فایل را به انتهای نام فایل اضافه می کند
        $file->move($path, $fileName); // تصویر در مسیر مورد نظر ذخیره میگردد
        return $path . '/'. $fileName //این مسیرو را در جدول ذخیره می کنی

    } 

و این دوتا کلاسو هم در همین کنترلر که دو متد درش هستند ArticleController یوز (use) کن

use Symfony\Component\HttpFoundation\File\UploadedFile;
use Illuminate\Support\Str;

@mehrdadroshanraee69

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

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

unlink($article->images);

در اینجا قطعا فیلد images باید مسیر تصویر شما در پروژه باشد.از الگویی که در بالا گفتم میتونید استفاده کنید و در همین کنترلر متدهای imageUpload و resize رو قرار بدین. @mehrdadroshanraee69

مهرداد
مهرداد
@mehrdadroshanraee69

@hosseinshirinegad98
ممنونم دوست خوبم بابت توضیحاتتون حتما تست میکنم روش شمارو

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلامت باشید

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

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