Installation
composer require disjfa/media-bundle
Add to config/app.php under providers:
Disjfa\MediaBundle\MediaServiceProvider::class,
Publish the config:
php artisan vendor:publish --provider="Disjfa\MediaBundle\MediaServiceProvider" --tag=config
Configuration
Edit config/media.php to define:
local, s3, etc.)['jpg', 'png', 'pdf'])10MB)First Use Case: Uploading a File
use Disjfa\MediaBundle\Facades\Media;
$path = Media::upload('file.jpg', 'uploads');
// Returns: "/uploads/file.jpg"
File Uploads
$path = Media::upload($file, 'folder', ['resize' => [200, 200]]);
$paths = Media::uploadMultiple($files, 'folder');
File Management
Media::delete($path); // Deletes from storage and DB (if tracked)
$files = Media::list('folder'); // Returns array of file info
Integration with Eloquent
use Disjfa\MediaBundle\Traits\HasMedia;
class Post extends Model {
use HasMedia;
}
$post->addMedia($file)->toMediaCollection('images');
Storage Adapters
local, s3, or custom adapters via config:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app/public'),
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'bucket' => env('AWS_BUCKET'),
],
],
Resizing and Thumbnails
$path = Media::upload($file, 'folder', [
'resize' => [100, 100],
'thumbs' => ['small' => [50, 50], 'medium' => [300, 300]],
]);
Permission Issues
chmod -R 775 storage/app/public
Missing Config
php artisan vendor:publish) to avoid default values overriding your settings.File Validation
$request->validate([
'file' => 'required|mimes:jpg,png,pdf|max:10240',
]);
Database Tracking
HasMedia, run migrations:
php artisan migrate
media table by default.Custom Storage Paths
config/media.php:
'paths' => [
'local' => storage_path('custom/media'),
],
dd(Media::list('folder')); // Inspect stored files
\Log::debug('Media upload error', ['path' => $path, 'error' => $e]);
php artisan config:clear
Custom Storage Adapters
Extend Disjfa\MediaBundle\Contracts\StorageAdapter for new backends (e.g., Azure Blob).
Events Listen for upload/delete events:
Media::uploaded(function ($path) {
// Post-upload logic
});
Middleware Restrict uploads by role:
Media::middleware(function ($request) {
return auth()->user()->can('upload-media');
});
Override Defaults
Bind custom classes in AppServiceProvider:
$this->app->bind(
Disjfa\MediaBundle\Contracts\StorageAdapter::class,
CustomStorageAdapter::class
);
How can I help you explore Laravel packages today?