FileUploader est un service PHP conçu pour gérer le téléchargement de fichiers dans une application Symfony. Il permet de valider, déplacer, et nommer les fichiers téléchargés de manière sécurisée.
- Assurez-vous que votre projet utilise Composer et Symfony.
- Ajoutez la classe
FileUploader
dans le répertoiresrc/Service
de votre projet Symfony.
Assurez-vous de configurer le service dans votre fichier de configuration services.yaml
:
services:
App\Service\FileUploader:
arguments:
$targetDirectory: '%kernel.project_dir%/assets/uploads'
Injectez le service FileUploader
dans votre méthode de contrôleur ou autre service où vous avez besoin de gérer des fichiers téléchargés :
public function edit(Request $request, Book $book, EntityManagerInterface $entityManager, FileUploader $fileUploader): Response
{
// ... votre code ...
if ($form->isSubmitted() && $form->isValid()) {
$fileName = $fileUploader->upload('poster', $form);
if ($fileName) {
$book->setPoster($fileName);
}
$entityManager->flush();
// ... votre code ...
}
// ... votre code ...
}
upload(string $inputFile, object $form)
: Télécharge un fichier depuis un champ de formulaire, valide son type MIME, génère un nom unique et déplace le fichier vers le répertoire cible.
validateMimeType(UploadedFile $file)
: Valide le type MIME d'un fichier pour s'assurer qu'il est supporté.getTargetDirectory()
: Retourne le répertoire cible pour les fichiers téléchargés.findFileByHash(string $fileHash)
: Cherche un fichier par son hash MD5.getFileByHash(UploadedFile $file)
: Retourne un fichier existant basé sur son hash MD5.getName(UploadedFile $file)
: Génère un nom sûr et unique pour un fichier téléchargé.
La méthode validateMimeType
permet de s'assurer que seuls les fichiers de types jpeg
, png
ou jpg
sont acceptés :
private function validateMimeType(UploadedFile $file)
{
$acceptMimeTypes = ['jpeg', 'png', 'jpg'];
$mimeType = $file->guessExtension();
if (!in_array($mimeType, $acceptMimeTypes)) {
throw new FileException('Type de fichier non supporté. Veuillez télécharger une image au format jpeg, png ou jpg.');
}
}
La méthode getName
génère un nom de fichier sûr et unique en utilisant un slug et un identifiant unique :
public function getName(UploadedFile $file): string
{
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $this->slugger->slug($originalFilename);
return $safeFilename . '-' . uniqid() . '.' . $file->guessExtension();
}