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

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

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

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);

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


ثبت پرسش جدید
رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

سلام.
شما وقتی عکسو 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;
}

موفق باشید.


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 2 سال پیش مطرح شد
0

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

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


Armin Rahmati
@arminrahmati999 2 سال پیش آپدیت شد
0

@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]));
    }

محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 2 سال پیش مطرح شد
0

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

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

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


Armin Rahmati
@arminrahmati999 2 سال پیش آپدیت شد
0

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

$data['image'] = $image . $image->dirname . '/' . $image->basename;

احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش مطرح شد
0

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

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

return $images

Armin Rahmati
@arminrahmati999 2 سال پیش مطرح شد
0

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


احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش مطرح شد
0

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


Armin Rahmati
@arminrahmati999 2 سال پیش مطرح شد
0

@ehsndvr

dd($images);
"upload/images/E7VzgrdfEFqbSDilgujxILI1MtRKmHcqxSM32lyz.jpg"

احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش مطرح شد
0
$images = $files->store($path, 'public_files')
Image::make(public_path($images))->resize(320, 240)->insert(public_path($images));

return $images

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


Armin Rahmati
@arminrahmati999 2 سال پیش مطرح شد
احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش مطرح شد
0

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


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

سلام.
شما وقتی عکسو 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;
}

موفق باشید.


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

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

        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
@arminrahmati999 2 سال پیش مطرح شد
0

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


احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش مطرح شد
0

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


Armin Rahmati
@arminrahmati999 2 سال پیش مطرح شد
0

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


احسان داوری
تخصص : برنامه نویس
@ehsndvr 2 سال پیش مطرح شد
0

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


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

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