composer require mwguerra/filemanager
php artisan vendor:publish --provider="MWGuerra\FileManager\FileManagerServiceProvider" --tag="filemanager-config"
// In your Filament app service provider (AppServiceProvider)
FileManager::register();
use MWGuerra\FileManager\Components\FileManager;
public function getPages(): array
{
return [
FileManager::make('files')
->disk('public')
->mode('database') // or 'storage'
->title('File Manager'),
];
}
config/filemanager.php under default_disk.use MWGuerra\FileManager\Components\FileManagerField;
public static function form(Form $form): Form
{
return $form
->schema([
FileManagerField::make('document')
->disk('s3')
->mode('database')
->required()
->label('Upload Document'),
]);
}
Override default behaviors via policies:
// app/Policies/FileManagerPolicy.php
public function before($user, $ability)
{
if ($user->isAdmin()) {
return true;
}
}
// Register in FileManagerServiceProvider
FileManager::policy(FileManagerPolicy::class);
use MWGuerra\FileManager\Facades\FileManager;
public function uploadFile(Request $request)
{
$file = $request->file('file');
$path = FileManager::upload($file, 'public', [
'folder' => 'uploads',
'metadata' => ['user_id' => auth()->id()],
]);
return response()->json(['path' => $path]);
}
Display files in a table:
use MWGuerra\FileManager\Components\FileManagerColumn;
public static function table(Table $table): Table
{
return $table
->columns([
FileManagerColumn::make('document')
->disk('public')
->mode('database')
->label('Attached File'),
]);
}
Configure multiple disks in config/filemanager.php:
'disks' => [
'local' => 'local',
's3' => [
'driver' => 's3',
'bucket' => 'my-bucket',
'url' => env('AWS_URL'),
],
],
Leverage Laravel’s built-in policies for fine-grained control:
// app/Policies/FileManagerPolicy.php
public function delete($user, File $file)
{
return $user->can('delete-files') && $file->user_id === $user->id;
}
Generate time-limited URLs:
$url = FileManager::temporaryUrl($file, now()->addMinutes(30));
Extend preview handlers in app/Providers/FileManagerServiceProvider.php:
FileManager::extendPreview('csv', function ($path) {
return view('filemanager::previews.csv', ['path' => $path]);
});
Use the FileManager::bulk() helper for batch actions:
FileManager::bulk()->delete($fileIds);
Disk Configuration Mismatch
config/filesystems.php matches the disks referenced in config/filemanager.php.php artisan storage:link for local disks and verify S3/MinIO credentials.Permission Denied Errors
storage_mode_permissions in config/filemanager.php:
'storage_mode_permissions' => [
'folder' => 0755,
'file' => 0644,
],
Database Mode Without Migrations
php artisan migrate
files table.CORS Issues with S3/MinIO
config/filemanager.php:
's3_cors' => [
'AllowedHeaders' => ['*'],
'AllowedMethods' => ['GET', 'HEAD', 'PUT', 'POST', 'DELETE'],
'AllowedOrigins' => [env('APP_URL')],
],
Livewire Component Conflicts
FileManager::make('unique-id')
->wireModel('file_manager_unique_id')
Log File Operations
Enable debug mode in config/filemanager.php:
'debug' => env('APP_DEBUG', false),
Logs will appear in storage/logs/laravel.log.
Check File Existence
Use the FileManager::exists() helper to verify files:
if (FileManager::exists('public/path/to/file.txt')) {
// File exists
}
Validate MIME Types
Customize allowed MIME types in config/filemanager.php:
'allowed_mime_types' => [
'image' => ['jpg', 'png', 'gif', 'webp'],
'document' => ['pdf', 'docx', 'xlsx'],
],
Clear Cached Views If previews render incorrectly:
php artisan view:clear
Custom File Metadata
Extend the File model:
// app/Models/File.php
public function scopeCustomScope($query, $value)
{
return $query->where('custom_field', $value);
}
Override Default Views Publish and modify views:
php artisan vendor:publish --provider="MWGuerra\FileManager\FileManagerServiceProvider" --tag="filemanager-views"
Edit files in resources/views/vendor/filemanager/.
Add Custom Actions Register via the service provider:
FileManager::extendAction('custom_action', function ($file) {
// Logic for custom action
return view('filemanager::actions.custom', ['file' => $file]);
});
Hook into Events Listen for file operations:
// app/Providers/EventServiceProvider.php
protected $listen = [
'MWGuerra\FileManager\Events\FileUploaded' => [
'App\Listeners\LogFileUpload',
],
];
Localization Publish translations:
php artisan vendor:publish --provider="MWGuerra\FileManager\FileManagerServiceProvider" --tag="filemanager-translations"
Edit files in resources/lang/.
How can I help you explore Laravel packages today?