FuelPHP - Téléchargement de fichiers

Le téléchargement de fichiers est l'une des fonctionnalités les plus couramment utilisées dans la programmation de formulaires. FuelPHP fournit une classe spéciale,Uploadpour gérer le téléchargement des fichiers. Apprenons à télécharger un fichier à l'aide de la classe Upload dans ce chapitre.

Configuration

La classe de téléchargement peut être configurée à l'aide d'un fichier de configuration séparé, fuel/app/config/upload.php. Les entrées de configuration importantes sont les suivantes -

  • max_size- Définissez la taille maximale du fichier à télécharger. «0» fait référence à une taille de téléchargement illimitée

  • ext_whitelist - Définir les extensions de fichier autorisées

  • ext_blacklist - Définir les extensions de fichier non autorisées

  • type_whitelist- Définissez les types de fichiers autorisés. Par exemple, "texte" pour le type mime "text / plain"

  • type_blacklist - Définir les types de fichiers non autorisés

  • mime_whitelist- Définissez les types de fichiers mime autorisés. Par exemple, "text / plain"

  • mime_blacklist - Définir les types de fichiers mime non autorisés

  • prefix - Chaîne à préfixer dans le nom de fichier lors de l'enregistrement du fichier téléchargé sur le serveur

  • suffix - Chaîne de suffixe dans le nom de fichier lors de l'enregistrement du fichier téléchargé sur le serveur

  • extension - Extension du fichier téléchargé à définir

  • create_path - S'il faut créer le chemin du fichier, s'il n'est pas disponible

  • overwrite - S'il faut écraser le fichier existant lors de l'enregistrement du fichier téléchargé

  • auto_rename - S'il faut renommer le fichier en ajoutant un numéro de séquence lors de l'enregistrement du fichier téléchargé

  • randomize - S'il faut créer un nom aléatoire de 32 caractères pour enregistrer le fichier téléchargé

Méthodes de téléchargement

La classe de téléchargement fournit des options pour traiter et enregistrer le fichier téléchargé par les utilisateurs. Chaque fichier traité (avant l'enregistrement) aura les informations suivantes dans le tableau de résultats.

  • field - Nom du champ de formulaire

  • name - Nom du fichier téléchargé

  • type - Type de fichier tel que défini par le navigateur

  • mimetype - Type de fichier tel que défini par la classe Upload

  • file - Nom complet de l'emplacement temporaire du fichier téléchargé

  • filename - Nom de fichier du fichier téléchargé

  • extension - Extension du fichier téléchargé

  • size - Taille du fichier téléchargé en octets

  • errors - Tableau d'erreur avec code d'erreur et message

  • error - Définir les erreurs de tableau avec la raison pour laquelle le téléchargement échoue (en cas d'échec du téléchargement)

Une fois les fichiers enregistrés sur le serveur, le tableau de résultats contient également les informations suivantes.

  • saved_to - Chemin d'accès complet où le fichier téléchargé a été enregistré

  • saved_as - Nom du fichier qui a été enregistré

  • errors - Tableau d'erreur mis à jour

Voyons maintenant la méthode de la classe Upload.

est valable

is_valid renvoie true, si un fichier valide est téléchargé par l'utilisateur.

// do we have any uploaded files to save? 
if (Upload::is_valid()) { 
   // process  
}

get_files

get_files renvoie tous les fichiers téléchargés sous forme de tableau multidimensionnel. Si un index / nom de l'entrée de fichier du formulaire est spécifié, il renverra le fichier téléchargé lié à l'entrée de fichier spécifiée uniquement.

foreach(Upload::get_files() as $file) { 
   // do something with the file info 
}  
if ( Upload::get_files(0)) { 
   // do something 
}

get_errors

get_errors renvoie un tableau d'erreurs, en cas d'échec du téléchargement d'un ou plusieurs fichiers. Si un index / nom du nom d'entrée de fichier du formulaire est spécifié, il renverra l'erreur liée à l'entrée de fichier spécifiée uniquement.

foreach(Upload::get_errors() as $file) { 
   // do something with the file info 
}  
if (Upload::get_errors('myimage')) { 
   // do something 
}

Processus

processus fait référence au processus réel de collecte d'informations sur le fichier téléchargé. Nous pouvons fournir une nouvelle configuration personnalisée à l'aide de array. Si aucune configuration n'est spécifiée, il utilisera la configuration définie dans fuel / app / config / upload.php

Upload::process (array( 
   'auto_rename' => false, 
   'overwrite'   => true 
));

enregistrer

save fait référence au processus réel d'enregistrement de tous les fichiers validés dans un emplacement approprié. Nous pouvons spécifier l'index pour enregistrer uniquement cette entrée particulière.

Upload::save();
Upload::save(0);
Upload::save(0, 3);

Exemple de travail

Créons un nouveau contrôleur, Controller_Upload dans notre exemple d'employé pour tester la fonctionnalité de téléchargement.

Step 1 - Créer un fichier, fuel/app/classes/controller/upload.php. Créez un contrôleur de téléchargement.

<?php 
   class Controller_Upload extends Controller { 
   }

Step 2 - Créez une nouvelle action get_upload.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      } 
   }

Step 3 - Créez une nouvelle vue pour l'action créée.

<!DOCTYPE html> 
<html> 
   <body> 
   
      <form action = "/upload/index" method = "post" enctype = "multipart/form-data"> 
         Select image to upload: 
         <input type = "file" name = "fileToUpload" id = "fileToUpload"> 
         <input type = "submit" value = "Upload Image" name = "submit"> 
      </form>  
      
   </body> 
</html>

Step 4 - Créez une nouvelle action post_action pour traiter le fichier téléchargé.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      }  
      public function post_index(){ 
         $config = array( 
            'path' => DOCROOT.'files', 
            'randomize' => true, 
            'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'), 
         );  
         Upload::process($config);  
         // if there are any valid files 
         
         if (Upload::is_valid()) { 
            Upload::save(); 
            echo "success"; 
         } else { 
            // and process any errors 
            foreach (Upload::get_errors() as $file) { 
               echo var_dump($file); 
            } 
         } 
      } 
   }

Enfin, lancez l'application en demandant l'url, http://localhost:8080/upload/index et essayez de télécharger le fichier.

Résultat