dahovitech/file-manager-bundle
Un bundle Symfony moderne et performant pour la gestion avancée de fichiers avec support multi-stockage, interface utilisateur intuitive et fonctionnalités étendues.
composer require dahovitech/file-manager-bundle
Ajoutez le bundle dans config/bundles.php :
return [
// ...
Dahovitech\FileManagerBundle\FileManagerBundle::class => ['all' => true],
];
Créez config/packages/flysystem.yaml :
flysystem:
storages:
# Stockage local
local.storage:
adapter: 'local'
options:
directory: '%kernel.project_dir%/public/uploads'
# AWS S3 (optionnel)
aws_s3.storage:
adapter: 'awss3v3'
options:
client:
version: 'latest'
region: '%env(AWS_REGION)%'
credentials:
key: '%env(AWS_ACCESS_KEY_ID)%'
secret: '%env(AWS_SECRET_ACCESS_KEY)%'
bucket: '%env(AWS_BUCKET)%'
prefix: 'files'
Créez config/packages/file_manager.yaml :
file_manager:
# Taille maximale de fichier (50MB)
max_file_size: 52428800
# Types de fichiers autorisés
allowed_mime_types:
- 'image/jpeg'
- 'image/png'
- 'image/gif'
- 'image/webp'
- 'application/pdf'
- 'text/plain'
- 'video/mp4'
- 'audio/mpeg'
# Configuration des thumbnails
thumbnails:
enabled: true
quality: 85
sizes:
small: { width: 150, height: 150 }
medium: { width: 300, height: 300 }
large: { width: 600, height: 600 }
# Sécurité
security:
check_file_signature: true
sanitize_filename: true
forbidden_extensions: ['exe', 'bat', 'cmd']
# Cache
cache:
enabled: true
ttl: 3600
# Interface utilisateur
ui:
theme: 'default'
default_view: 'grid'
enable_drag_drop: true
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
php bin/console assets:install
Accédez à /file-manager pour utiliser l'interface graphique complète.
// Upload de fichier
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('storage', 'local.storage');
fetch('/file-manager/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => console.log(data));
// Liste des fichiers avec pagination
fetch('/file-manager/api/files?page=1&limit=20&search=photo')
.then(response => response.json())
.then(data => console.log(data));
use Dahovitech\FileManagerBundle\Service\FileManagerService;
class MyController extends AbstractController
{
public function __construct(
private FileManagerService $fileManager
) {}
public function upload(Request $request): Response
{
$uploadedFile = $request->files->get('file');
$folder = null; // ou récupérer un dossier existant
$file = $this->fileManager->uploadFile(
$uploadedFile,
$folder,
'local.storage'
);
return $this->json(['id' => $file->getId()]);
}
}
# Nettoyage complet avec simulation
php bin/console file-manager:cleanup --dry-run
# Suppression des fichiers orphelins
php bin/console file-manager:cleanup --orphans
# Suppression définitive des fichiers supprimés
php bin/console file-manager:cleanup --deleted --older-than=30
# Statistiques générales
php bin/console file-manager:stats
# Statistiques détaillées par type
php bin/console file-manager:stats --detailed --by-type
# Export CSV
php bin/console file-manager:stats --export=stats.csv
# Synchronisation complète
php bin/console file-manager:sync
# Régénération des thumbnails
php bin/console file-manager:sync --regenerate-thumbnails
# Mise à jour des métadonnées
php bin/console file-manager:sync --update-metadata
use Dahovitech\FileManagerBundle\Event\FileUploadEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class FileManagerSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
FileUploadEvent::POST_UPLOAD => 'onFileUploaded',
];
}
public function onFileUploaded(FileUploadEvent $event): void
{
$file = $event->getFile();
// Traitement personnalisé après upload
if ($file->isImage()) {
// Redimensionner, optimiser, etc.
}
}
}
file_manager:
security:
scan_viruses: true # Nécessite ClamAV
check_file_signature: true
forbidden_extensions: ['exe', 'bat', 'cmd', 'scr', 'vbs']
rate_limiting:
enabled: true
max_uploads_per_minute: 10
file_manager:
ui:
theme: 'dark' # ou 'light', 'auto'
show_breadcrumb: true
show_stats: true
default_view: 'list' # ou 'grid'
Le bundle inclut une suite de tests complète :
# Tests unitaires
php vendor/bin/phpunit Tests/Unit
# Tests fonctionnels
php vendor/bin/phpunit Tests/Functional
# Tests d'intégration
php vendor/bin/phpunit Tests/Integration
# Couverture de code
php vendor/bin/phpunit --coverage-html coverage
Upload échoue avec des gros fichiers :
# php.ini
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
Thumbnails non générés :
# Vérifiez les extensions PHP
php -m | grep -E "(gd|imagick)"
# Permissions du dossier
chmod 755 public/uploads
Erreurs de permissions :
# Permissions appropriées
chown -R www-data:www-data public/uploads
chmod -R 755 public/uploads
# Sauvegarde de la base
mysqldump -u user -p database > backup.sql
# Migration automatique
php bin/console file-manager:migrate:v2
# Vérification
php bin/console file-manager:sync --fix-missing
Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour les guidelines.
git clone https://github.com/dahovitech/file-manager-bundle.git
cd file-manager-bundle
composer install
npm install
npm run dev
Consultez CHANGELOG.md pour l'historique des versions.
Ce projet est sous licence MIT. Voir LICENSE pour plus de détails.
How can I help you explore Laravel packages today?