Overview
LaraCMS integrates Spatie Media Library, a powerful package for associating files with Eloquent models. It provides automatic image conversions, responsive images, custom properties, and organized media management.What is Spatie Media Library?
Spatie Media Library is a Laravel package that:- Associates media files with database models
- Generates multiple image sizes automatically
- Organizes files by model and collection
- Tracks file metadata (size, mime type, custom properties)
- Provides responsive image support
- Handles file deletion with model cleanup
Database Structure
Spatie creates amedia table to store file information:
database/migrations/2025_03_30_145318_create_media_table.php
Implementation in LaraCMS
Models Using Media Library
LaraCMS implements Spatie Media Library in two primary models:- Album Model
- Photo Model
Albums use media for cover images and album-wide media:Features:
- Cover photo for album preview
- Automatic thumbnail generation (300x300)
- Non-queued processing for immediate availability
app/Models/Album.php:42Media Collections
Collections organize different types of media:- Separate image types (gallery, thumbnails, avatars)
- Different processing rules per collection
- Organized media retrieval
Image Conversions
Automatic Thumbnail Generation
Conversions create different image sizes automatically:Fit::Contain- Scale to fit within dimensions (maintains aspect ratio)Fit::Crop- Crop to exact dimensionsFit::Max- Scale down if larger (never upscale)Fit::Stretch- Ignore aspect ratio
app/Models/Photo.php:27
User Workflows
Uploading Media
Uploading Media
File Upload Process
-
Admin Uploads Photo
- Navigate to
/admin/gallery/photos - Click “Upload New Photo”
- Select image file from computer
- Navigate to
-
Spatie Processing
- Original file stored in configured disk
- UUID generated for unique identification
- File metadata extracted (size, mime type)
- Media record created in database
-
Conversion Generation
- Preview thumbnail created (300x300)
- Additional conversions processed
- Conversions stored alongside original
-
Model Association
- Media linked to Photo model via polymorphic relationship
- Added to
imagescollection - Available for immediate display
Retrieving Media
Retrieving Media
Deleting Media
Deleting Media
Media Cleanup
Delete Single Media Item:- Original files deleted from disk
- All conversions deleted
- Database records removed
- No orphaned files
Advanced Features
Custom Properties
Custom Properties
Storing Metadata
Attach custom data to media:- Photo EXIF data
- Copyright information
- Alt text for accessibility
- SEO metadata
Responsive Images
Responsive Images
Automatic Responsive Generation
Generate multiple image sizes for responsive design:File Validation
File Validation
Storage Configuration
Media files are stored based on Laravel filesystem configuration:- Original:
storage/app/public/{model-id}/{filename} - Conversions:
storage/app/public/{model-id}/conversions/{filename}
public/storage → storage/app/public
Performance Optimization
Queued Conversions
Process heavy images in background:Benefits:
- Faster user response
- Handles large images
- Scalable processing
Eager Loading
Prevent N+1 queries:Reference:
app/Http/Controllers/Admin/PhotoController.php:17Comparison: Before and After
- Without Spatie
- With Spatie
Manual File Handling:Limitations:
- Manual thumbnail creation
- No automatic cleanup
- Hard to organize multiple images
- No metadata tracking
Common Operations
Update Media
Check Media Existence
Download Media
Best Practices
Collection Naming
Use descriptive collection names:
images- Main photosthumbnails- Profile picturesdocuments- PDFs, filesvideos- Video content
files or media.Conversion Strategy
Plan conversions carefully:
- Thumbnails: Small, non-queued
- Display: Medium, queued
- Large: Queued with optimization
Cleanup Policy
Configure automatic cleanup:
CDN Integration
Serve media from CDN:Improves performance globally.
Troubleshooting
Conversions Not Generating
Conversions Not Generating
Issue: Thumbnails not appearingSolutions:
- Ensure storage is linked:
php artisan storage:link - Check queue is running:
php artisan queue:work - Verify image library installed (GD or Imagick)
- Check permissions on storage directory
- Run conversions manually:
php artisan media-library:regenerate
Large File Uploads Failing
Large File Uploads Failing
Issue: Uploads timeout or failSolutions:
- Increase PHP upload limits in
php.ini: - Use queued conversions for large images
- Implement chunked uploads for very large files
- Consider client-side compression
Migration from Manual Storage
If converting existing file storage to Spatie:Additional Resources
- Spatie Documentation: https://spatie.be/docs/laravel-medialibrary
- Image Optimization: https://spatie.be/docs/image
- Video Tutorial: Search for “Spatie Media Library Laravel” on YouTube