راکت
حل شده

ذخیره عکس با پکیج Intervention Image

17 پاسخ

سلام دوستان.
من قبلا عکس رو به صورت زیر ذخیره میکردم.

protected function uploadImage($images = '') {
        $path = 'upload/images';
        if (request()->hasFile('image') && $files = request()->file('image'))
            $images = $files->store($path, 'public_files');
        return $images;
    }

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

$images = Image::make($files->store($path, 'public_files'))->resize(320, 240);

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

ثبت پرسش جدید

پاسخ‌ها

17
رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

بهترین پاسخ

سلام.
شما وقتی عکسو resize میکنی در آخر باید اونو با دستور save ذخیره کنی تا دیگه عکس با سایز اصلی ذخیره نشه، در واقع کدتونو باید به صورت زیر بنویسید.

protected function uploadImage($images = '') {
    $path = 'upload/images';
    if (request()->hasFile('image') && $files = request()->file('image'))
        $images = $files->store($path, 'public_files');
        Image::make($images)->resize(320, 240)->save($images);
    return $images;
}

موفق باشید.

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

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

برای ذخیره اطلاعات تصویر در دیتابیس باید بصورت جداگانه این کار رو با استفاده از Eloquent یا QueryBuilder انجام بدید.

Armin Rahmati
Armin Rahmati
@arminrahmati999

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

public function store(CreateGalleryRequest $request, Job $job)
    {
        $image = $this->uploadImage();
        if ($request->hasFile('image')) {
            $data['image'] = $image;
        } else
            $data['image'] = null;
        $job->gallery()->create($data);
        return redirect(route('jobs.gallery.index' , ['job' => $job->id]));
    }

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

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

عرض کردم این قضیه هیچ ارتباطی با پکیج نداره.
شما باید ببینید چه اطلاعاتی رو اینجا دارید به متد create پاس میدید:

        $job->gallery()->create($data);

و طبیعیه که خروجی متد store با Image::make یکسان نیست. بعد از استفاده از پکیج باید این اطلاعات رو هم متناسب با خروجی ویرایش کنید و اطلاعات درست رو به create بدید.

Armin Rahmati
Armin Rahmati
@arminrahmati999

@mhyeganeh
الان من کدمو به صورت زیر نوشتم که هم داخل دیتابیس ذخیره میشه و هم مسیر مشخص شده ولی عکسا resize نمیشن و با همون سایز اصلی ذخیره میشه.

$data['image'] = $image . $image->dirname . '/' . $image->basename;
احسان داوری
احسان داوری
@ehsndvr

تخصص: برنامه نویس

سلام فکر میکنم اگر از این کد استفاده کنید درست میشه

$images = $files->store($path, 'public_files')
Image::make($images)->resize(320, 240);

return $images
Armin Rahmati
Armin Rahmati
@arminrahmati999

@ehsndvr
مشکل همچنان باقیست و عکس با سایز اصلی ذخیره میشه.

احسان داوری
احسان داوری
@ehsndvr

تخصص: برنامه نویس

@arminrahmati999
داخل اون کدی که بهتون دادم تابع : $images
چه چیزی هست دقیقا ؟ مقدارش رو اینجا قرار بدین

Armin Rahmati
Armin Rahmati
@arminrahmati999

@ehsndvr

dd($images);
"upload/images/E7VzgrdfEFqbSDilgujxILI1MtRKmHcqxSM32lyz.jpg"
احسان داوری
احسان داوری
@ehsndvr

تخصص: برنامه نویس

$images = $files->store($path, 'public_files')
Image::make(public_path($images))->resize(320, 240)->insert(public_path($images));

return $images

این کد رو امتحان کنید

Armin Rahmati
Armin Rahmati
@arminrahmati999
احسان داوری
احسان داوری
@ehsndvr

تخصص: برنامه نویس

@arminrahmati999
شما میتونید به بنده any desk بدید که من کامل بررسی بکنم کدتون رو ؟
اگر نمیتونید
کدتون رو کامل اینجا قرار بدین

محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

سلام دوست عزیز من از کد زیر استفاده میکنم و کار میکنه.

        if ($receivedImage){
            $imageType=$receivedImage->getClientOriginalExtension();

                $generated=generateRandomString();
                $imageName= $generated . '.' .$imageType;
                $fullAddress='/storage/structures/'.$imageName;

            $image=Image::make($receivedImage);
            $image->resize(600,600)->encode('jpg');
            Storage::put('/public/structures/'.$imageName, (string) $image->encode());
            return $fullAddress;
        }else{
            return null;
        }

نکته ای که هست اینه ک من یک نام رندون ایجاد میکنم با تابعی که اسمش مشخصه
و مسیر ذخیره ی این فایل رو هم برگشت میدم که برای خودم ذخیره کنم
کد خوانا هست
$receivedImage هم عکسی هست که بارگزاری شده.

Armin Rahmati
Armin Rahmati
@arminrahmati999

@mhyeganeh
@ehsndvr
@rezajahangir
@salar.mohammad2013
تشکر از همگی بابت وقتی که گذاشتید.

احسان داوری
احسان داوری
@ehsndvr

تخصص: برنامه نویس

@arminrahmati999 خواهش میکنم، مشکلتون حل شد ؟
چون بنده راهی پیدا کردم اگر میخواید براتون بزارم

Armin Rahmati
Armin Rahmati
@arminrahmati999

@ehsndvr
به نتیجه رسیدم ولی ممنون میشم از تجربه شما هم استفاده کنم.

احسان داوری
احسان داوری
@ehsndvr

تخصص: برنامه نویس

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

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

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