راکت

آپلود 3 عکس

6 پاسخ

سلام دوستان.
به دلایلی میخوام کاربر برای گالری تصاویر حداکثر 3 تا عکس بتونه آپلود کنه و سه تا input جدا واسش درنظر گرفتم.
حالا واسه آپلود عکس با 3 input جدا، بهینه ترین روش واسه آپلود چیه؟

ثبت پرسش جدید

پاسخ‌ها

6
سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

منظورت از بهترین روش چیه؟!
ساختار منظورته یا نوشتن کد آپلود؟

معمولا اگر از ۱ عکس بیشتر باشه میام یک جدول دیگه واس ذخیره آدرس عکس ها استفاده میکنم و از ریلیشن ها بهره میبرم

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

Armin Rahmati
Armin Rahmati
@arminrahmati999

@juza66
جدول جدا در نظر گرفتم به صورت زیر:

Schema::create('job_galleries', function (Blueprint $table) {
    $table->id();
    $table->foreignId('job_id')->constrained()->onDelete('CASCADE');
    $table->string('image1');
    $table->string('image2');
    $table->string('image3');
    $table->timestamps();
});

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

<input type="file" name="image1" id="fileInput" class="drop-zoon__file-input" accept="image/*">
<input type="file" name="image2" id="fileInput" class="drop-zoon__file-input" accept="image/*">
<input type="file" name="image3" id="fileInput" class="drop-zoon__file-input" accept="image/*">

فانکشن آپلود هم به صورت زیر نوشتم:

public function uploadImages($images = null) {
        $path = 'upload/images';
        if (request()->hasFile('image1') && $files = request()->file('image1')) {
            $images = $files->store($path, 'public_files');
        }
        return $images;
    }

کنترلر:

public function store(Job $job)
    {
        $images = $this->uploadImages();
        $data['image1'] = $images;
        $job->gallery()->create($data);
        return redirect()->route('jobs.gallery.index', ['job' => $job->id]);
    }

الان کد بالا به درستی عکس رو آپلود میکنه.
حالا مشکل اینجاست که من واسه سه تا input فانکشنمو به چه صورت بنویسم؟

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

Armin Rahmati
Armin Rahmati
@arminrahmati999

کدمو به صورت زیر نوشتم و به درستی کار میکنه ولی بهینه نیست، ممنون میشم کمکم کنید.

protected function uploadImage1($images = '') {
        $path = 'upload/images';
        if (request()->hasFile('image1') && $files = request()->file('image1'))
            $images = $files->store($path, 'public_files');
        return $images;
    }
    protected function uploadImage2($images = '') {
        $path = 'upload/images';
        if (request()->hasFile('image2') && $files = request()->file('image2'))
            $images = $files->store($path, 'public_files');
        return $images;
    }
    protected function uploadImage3($images = '') {
        $path = 'upload/images';
        if (request()->hasFile('image3') && $files = request()->file('image3'))
            $images = $files->store($path, 'public_files');
        return $images;
    }
public function store(Request $request, Job $job)
    {
        $image1 = $this->uploadImage1();
        $image2 = $this->uploadImage2();
        $image3 = $this->uploadImage3();
        if ($request->hasFile('image1')) {
            $data['image1'] = $image1;
        } else
            $data['image1'] = null;

        if ($request->hasFile('image2')) {
            $data['image2'] = $image2;
        } else
            $data['image2'] = null;

        if ($request->hasFile('image3')) {
            $data['image3'] = $image3;
        } else
            $data['image3'] = null;

        $job->gallery()->create($data);
        return redirect()->route('jobs.gallery.index', ['job' => $job->id]);
    }
Morteza Khodarahmi
Morteza Khodarahmi
@mrkhodarahmii

تخصص: Backend Developer

سلام
میتونی از این پکیج استفاده کنی
کار کردن باهاش راحته و امکان ریسایز کردن عکس ها رو هم بهت میده

موفق باشی

Armin Rahmati
Armin Rahmati
@arminrahmati999

@mrkhodarahmii
اگه نخوام از این پکیج استفاده کنم، کدمو چه تغییری باید بدم؟

آرش دولتی مهر
آرش دولتی مهر
@arashdm2020

تنها راه و البته بهترین راه استفاده از جداول واسط و ریلیشن هست هیچ راه حل منطقی دیگه ای نداره

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

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