آپلود تصویر در لاراول: از صفر تا حرفهای با پکیجهای Spatie
خلاصهٔ کاملتر
آپلود تصویر یکی از رایجترین نیازهای اپلیکیشنهای وبه، ولی پیادهسازی درست اون از یه فرم ساده خیلی فراتر میره. این مقاله مسیر رو بهصورت مرحلهای طی میکنه و نشون میده چطور میشه با اضافهکردن پکیجهای Spatie، یه راهحل کامل و مقیاسپذیر ساخت.
سطح ۱: لاراول خالص — اولین مرحله فقط با امکانات داخلی لاراول کار میکنه. یه فرم با enctype="multipart/form-data" و یه کنترلر که فایل رو validate و ذخیره میکنه. این روش کار میکنه ولی نه ریسایز داره، نه بهینهسازی، نه اتصال به مدلهای Eloquent.
سطح ۲: پکیج spatie/image — برای ریسایز و دستکاری تصویر، پکیج spatie/image یه API زنجیرهای و تمیز ارائه میده. میشه عرض، ارتفاع، crop، blur و حتی grayscale رو با چند خط کد اعمال کرد:
Image::load(storage_path('app/' . $path))
->width(800)
->save(storage_path('app/public/' . $finalPath));سطح ۳: پکیج spatie/image-optimizer — فایلهای تصویری حتی بعد از ریسایز ممکنه حجم زیادی داشته باشن. این پکیج از ابزارهای CLI مثل jpegoptim و pngquant استفاده میکنه تا حجم رو بدون افت محسوس کیفیت کاهش بده. یکپارچگیاش با spatie/image هم خیلی راحته؛ فقط یه متد ->optimize() به زنجیره اضافه میشه.
سطح ۴: پکیج laravel-medialibrary — این پکیج قدرتمند به شما اجازه میده تصویرها رو مستقیماً به مدلهای Eloquent متصل کنید. یعنی مثلاً یه Post میتونه یه کالکشن از تصویر داشته باشه و تبدیلهای خودکار (مثل thumbnail) هم بهراحتی تعریف میشن:
$post->addMediaFromRequest('image')
->toMediaCollection('featured');سطح ۵: Media Library Pro — این افزونه تجاری Spatie، کامپوننتهای آماده برای Blade، Livewire، React و Vue ارائه میده که شامل drag & drop، نوار پیشرفت، پیشنمایش تصویر و مرتبسازی هستن. در سمت کنترلر هم بهجای addMediaFromRequest از addFromMediaLibraryRequest استفاده میشه و بقیه منطق همونه.
نکات کلیدی:
- لاراول بهتنهایی آپلود پایه رو پوشش میده ولی ریسایز و بهینهسازی نیاز به پکیج داره
- spatie/image برای دستکاری و spatie/image-optimizer برای کاهش حجم با یه خط کد به هم وصل میشن
- laravel-medialibrary آپلود رو به سطح مدل میبره و مدیریت کالکشن و تبدیل خودکار رو ممکن میکنه
- Media Library Pro یه UI کامل و حرفهای اضافه میکنه و ساعتها کار فرانتاند رو ذخیره میکنه
- انتخاب سطح مناسب به نیاز پروژه بستگی داره؛ نه همیشه باید از همه امکانات استفاده کرد




