Spatie Laravel Media Library is a powerful package that makes it easy to manage media uploads in Laravel applications. It allows you to associate files (like images, PDFs, etc.) with your Eloquent models, providing a simple and convenient API for handling file uploads, conversions, and storage.
Key Features of Spatie Laravel Media Library:
- File Uploads: Easily upload files and associate them with Eloquent models.
- File Conversion: Automatically convert images to different formats or sizes.
- File Manipulation: Provides methods for resizing, cropping, and applying filters to images.
- Custom Storage: Store media files on various filesystems (local, S3, etc.).
- Responsive Images: Automatically generate responsive images for various screen sizes.
- Media Collections: Group related media items into collections for better organization.
Installation
To get started with Spatie Laravel Media Library, follow these steps:
- Require the Package: Install the package via Composer:
1composer require spatie/laravel-medialibrary - Publish the Configuration: Publish the configuration file and migration:
12php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider"php artisan migrate - Set Up Model: Use the
HasMedia
trait in your Eloquent model that will handle media uploads. For example:
123456789101112namespace App\Models;use Illuminate\Database\Eloquent\Model;use Spatie\MediaLibrary\HasMedia;use Spatie\MediaLibrary\InteractsWithMedia;class Product extends Model implements HasMedia{use InteractsWithMedia;// Other model properties and methods...}
Uploading Media
You can upload media files and associate them with a model using the addMedia
method.
Example
1 2 3 4 5 6 7 8 9 |
use App\Models\Product; // Create a new product instance $product = Product::create([ 'name' => 'Example Product', ]); // Upload a media file and associate it with the product $product->addMedia($request->file('image'))->toMediaCollection('images'); |
Accessing Media
Once media has been associated with a model, you can easily retrieve it:
1 2 3 4 5 |
$product = Product::find(1); $mediaItems = $product->getMedia('images'); // Display the first image URL $imageUrl = $mediaItems[0]->getUrl(); |
Media Conversions
You can define conversions for media files in your model to automatically create different sizes or formats when a file is uploaded.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
use Spatie\MediaLibrary\InteractsWithMedia; class Product extends Model implements HasMedia { use InteractsWithMedia; public function registerMediaConversions(Media $media = null): void { $this->addMediaConversion('thumb') ->width(150) ->height(150) ->sharpen(10); } } |
When a media file is uploaded, the conversion will be created automatically.
Responsive Images
You can easily generate responsive images by defining a conversion for different screen sizes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public function registerMediaConversions(Media $media = null): void { $this->addMediaConversion('small') ->width(320) ->height(240) ->sharpen(10); $this->addMediaConversion('medium') ->width(640) ->height(480) ->sharpen(10); $this->addMediaConversion('large') ->width(1280) ->height(960) ->sharpen(10); } |
File Manipulation
You can manipulate uploaded files easily, such as resizing or cropping images:
1 2 3 4 |
$product->addMedia($request->file('image')) ->setName('custom-name') ->setCustomProperty('key', 'value') ->toMediaCollection('images'); |
Cleanup Old Media
To remove unused media, you can use the cleanup command provided by the package:
1 |
php artisan medialibrary:clean |
Conclusion
Spatie Laravel Media Library simplifies the process of managing media uploads in Laravel applications. With its rich set of features and easy integration, it is an essential tool for any Laravel developer dealing with media files.
Additional Considerations
- Storage Configuration: Ensure your filesystem is configured properly in
config/filesystems.php
. - Testing: When working with file uploads, consider writing tests to ensure your upload and conversion logic works as expected.
- Documentation: Refer to the official Spatie Laravel Media Library documentation for more advanced features and use cases.