livewire-filemanager/filemanager
Livewire-powered file manager for Laravel: drag & drop uploads, search, folders, dark mode, multi-language UI, and API endpoints. Integrates with Spatie Media Library for media handling and thumbnails. PHP 8.2+.
Installation:
composer require livewire-filemanager/filemanager
php artisan vendor:publish --tag=livewire-filemanager-migrations
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"
php artisan migrate
Basic Integration: Add the component to a Blade view with Tailwind/AlpineJS:
@filemanagerStyles
<x-livewire-filemanager />
@filemanagerScripts
First Use Case:
File Management:
<x-livewire-filemanager /> handles all CRUD operations.filemanager.upload Livewire event).API Integration:
/api/filemanager/v1/ for programmatic access.config/livewire-filemanager.php).axios.post('/api/filemanager/v1/folders', { name: 'NewFolder' }, {
headers: { 'Authorization': `Bearer ${userToken}` }
});
Customization:
app.css or tailwind.config.js:
// tailwind.config.js
module.exports = {
content: [
'./resources/**/*.blade.php',
'./vendor/livewire-filemanager/filemanager/resources/views/**/*.blade.php',
],
};
class CustomFilemanager extends \LivewireFilemanager\Filemanager\Livewire\Filemanager {
public function customUpload($files) {
// Pre-process files before upload
$this->upload($files);
}
}
Public File Access:
FileController:
Route::get('{path}', [\LivewireFilemanager\Filemanager\Http\Controllers\Files\FileController::class, 'show'])
->where('path', '.*')->name('assets.show');
Media model for consistency:
use LivewireFilemanager\Filemanager\Models\Media;
$media = Media::find(1)->getUrl();
config(['livewire-filemanager.thumbnail_queue' => true]);
// config/livewire-filemanager.php
'acl_enabled' => true,
Publish Spatie’s config and set media_model to LivewireFilemanager\Filemanager\Models\Media.HTTPS Requirement:
APP_URL properly.Thumbnail Queue:
QUEUE_CONNECTION=sync
Tailwind CDN in Production:
@filemanagerStyles in production. Instead, include the package’s CSS via Tailwind’s content paths.ACL Misconfiguration:
media_model in config/medialibrary.php points to LivewireFilemanager\Filemanager\Models\Media.File Size Limits:
upload_max_filesize and post_max_size may block large uploads. Adjust in php.ini or use chunked uploads:
config(['livewire-filemanager.chunk_uploads' => true]);
filemanager.uploaded:
Livewire::listen('filemanager.uploaded', function ($event) {
Log::info('File uploaded:', $event['file']);
});
// config/cors.php
'paths' => ['api/filemanager/v1/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'], // Restrict in production
Custom Storage:
Override the Storage facade binding:
$this->app->bind(\Illuminate\Contracts\Filesystem\Filesystem::class, function () {
return \Illuminate\Support\Facades\Storage::disk('s3');
});
File Validation:
Extend the Filemanager Livewire class to add custom rules:
protected function rules() {
return [
'files.*' => ['required', 'file', 'mimes:jpg,png,pdf', 'max:10240'], // 10MB limit
];
}
Event Listeners: Listen for file/folder events:
use LivewireFilemanager\Filemanager\Events\FileUploaded;
FileUploaded::listen(function (FileUploaded $event) {
// Send notification or log metadata
});
Dark Mode: Force dark mode via config:
'dark_mode' => env('APP_DARK_MODE', false),
axios.post('/api/filemanager/v1/files/bulk', {
files: [1, 2, 3],
action: 'delete'
});
resources/lang/vendor/livewire-filemanager:
'copy_url' => 'Copied link to clipboard!',
'thumbnail_generation' => false, // Skip thumbnails for non-image files
How can I help you explore Laravel packages today?