# Media Management
Estimated time: 6 minutes
Difficulty: Beginner
LaraCoreKit uses Spatie Laravel MediaLibrary for file uploads, image optimization, and media management.
Features
- Upload any file type
- Automatic image conversions (thumbnails, etc.)
- Store locally or on S3
- Admin media browser
- Associate media with any Eloquent model
Setup
Add HasMedia and InteractsWithMedia to any model:
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class Post extends Model implements HasMedia
{
use InteractsWithMedia;
public function registerMediaCollections(): void
{
$this->addMediaCollection('cover')
->singleFile() // Only one cover per post
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/webp']);
}
public function registerMediaConversions(Media $media = null): void
{
$this->addMediaConversion('thumb')
->width(400)
->height(300)
->sharpen(10);
$this->addMediaConversion('og')
->width(1200)
->height(630);
}
}
Uploading Files
From Request (controller/Livewire)
// Upload from file upload
$post->addMediaFromRequest('cover_image')
->toMediaCollection('cover');
// Upload from URL
$post->addMediaFromUrl('https://www.laracorekit.com/image.jpg')
->toMediaCollection('cover');
// Upload from existing file path
$post->addMedia('/path/to/file.jpg')
->toMediaCollection('cover');
Retrieving Media
// Get first media URL
$coverUrl = $post->getFirstMediaUrl('cover');
// Get thumbnail conversion
$thumbUrl = $post->getFirstMediaUrl('cover', 'thumb');
// Get all media
$allImages = $post->getMedia('images');
// Check if media exists
if ($post->hasMedia('cover')) {
// ...
}
In Blade Templates
<img
src="{{ $post->getFirstMediaUrl('cover', 'thumb') }}"
alt="{{ $post->title }}"
loading="lazy"
>
Admin Media Library
Access the media browser at /admin/media to:
- Browse all uploaded files
- Delete unused media
- Preview images
Storage Configuration
For production, use S3:
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket