spatie/laravel-medialibrary
Attach and manage files on Eloquent models with an easy API. Handle uploads, store media on any Laravel filesystem (local, S3, etc.), organize collections, and generate image/PDF conversions and manipulations with built-in support for responsive images.
images, documents) aligns with domain-driven design patterns, enabling clean separation of concerns.HasMedia, HasMediaConversions) and interfaces, minimizing invasive changes to existing models. Backward-compatible with Laravel 9–13.Storage facade. Supports multi-disk collections (e.g., small files on local, large files on s3).laravel-medialibrary may require rewiring controllers/services.media pivot table) could be error-prone without a migration strategy.laravel-permission for access control).spatie/laravel-medialibrary’s Symfony bridge.BlogPost) to test the integration.media pivot table (if not using migrations):
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
Storage::put()) with addMedia() calls.// Before
$path = $request->file('image')->store('uploads');
// After
$model->addMedia($request->file('image'))->toMediaCollection('images');
public function handle($request, Closure $next) {
$oldPath = 'old-uploads/image.jpg';
if (Storage::disk('public')->exists($oldPath)) {
return redirect()->to($model->getFirstMediaUrl('images'));
}
return $next($request);
}
^11.22 for stability.spatie/laravel-medialibrary-ffmpeg).config/medialibrary.php).config/medialibrary.php (e.g., disk settings, conversion drivers).'disk' => 's3',
'conversions' => [
'thumbnails' => [
'width' => 200,
'height' => 200,
],
],
composer require spatie/laravel-medialibrary:^11.22 to stay updated.storage/logs/laravel.log for filesystem errors.chmod -R 755 storage/).queue:work) to offload processing.media pivot table on model_id and collection_name.getTemporaryUrl() with Cloudflare/AWS CloudFront for faster delivery.| Failure Scenario | Mitigation Strategy |
|---|---|
| Disk full (e.g., S3 quota) | Implement storage monitoring (e.g., Laravel Horizon alerts). |
| Queue backlog (conversions) | Scale workers horizontally; use priority queues for critical media. |
| Corrupted media files | Add checksum validation during upload (e.g., hash_file('md5', $file)). |
| Orphaned files (deleted model) | Run php artisan media:clean periodically; use soft deletes for models. |
| DDoS on upload endpoints | Rate-limit uploads (e.g., throttle:60,1 middleware). |
How can I help you explore Laravel packages today?