IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Restriction sur le type de fichier à uploader


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 132
    Points : 83
    Points
    83
    Par défaut Restriction sur le type de fichier à uploader
    Bonsoir à tous,

    je viens de créer une méthode pour l'upload de fichier dans un répertoire et sous répertoire genre c:\upload\2011\nomDuFichier.pdf

    Le répertoire avec la date se met automatiquement en 2012 quand il faudra, car il est creer par l'appel de la méthode getdate.

    mais mon problème est que je voudrais limiter l'uploade à un type de fichier, les doc,docx et pdf.

    j'ai beau regarder je trouve pour php ou avec struts, mais je n'utilise pas struts pour l'instant, mais apache commons fileupload.

    j'ai regardé sur le forum, mais je n'ai rien qui me dit comment faire.

    Auriez-vous une idée pour moi ?

    voici mon code (fonctionnel) il me faut juste le système pour vérification de l'extension à l'upload.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    /**
     * 
     */
    package be.festiwavre.rl.uploadFiles;
     
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.log4j.Logger;
     
    import be.festiwavre.model.rl.modifUsers.ModifUsersModel;
     
    /**
     * Classe de méthode pour la gestion des uploades
     * 
     * @author Rudy Lemaitre
     * 
     */
    public class UploadFileOnServer implements UploadInterface {
    	private static final String	dossierUplaod	= "c://upload//";
     
    	/**
    	 * mise en service du logger
    	 */
    	private static final Logger	log = Logger.getLogger(ModifUsersModel.class);
     
    	/**
    	 * Méthode pour l'upload de fichier sur le disque dur
    	 * 
    	 * @author Rudy Lemaitre
    	 * @param id
    	 *            : id du dossier lier au documents
    	 * @param request
    	 *            : le fichier à uploader
    	 */
    	public void UploadFile(String id, HttpServletRequest request) {
    		// Création du format de la date pour le répertoire
    		SimpleDateFormat dateFormatDirectory = new SimpleDateFormat("yyyy");
    		String dateDirectory = dateFormatDirectory.format(new Date());
    		// Création du format de la date pour le fichier
    		SimpleDateFormat dateFormat = new SimpleDateFormat(
    				"yyyy_MM_dd-HH-mm-ss");
    		String date = dateFormat.format(new Date());
     
    		// on prépare pour l'envoie par la mise en oeuvre en mémoire
    		DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
     
    		ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
    		try {
    			List<FileItem> items = (List<FileItem>) uploadHandler
    					.parseRequest(request);
    			Iterator<FileItem> itr = (Iterator<FileItem>) items.iterator();
    			// au besoin on creer le dossier principal des archive et le sous
    			// dossier qui correspond à l'année en cour
    			new File(dossierUplaod + dateDirectory).mkdirs();
     
    			while (itr.hasNext()) {
    				FileItem item = (FileItem) itr.next();
     
    				// on donne le chemin d'écriture au fichier ainsi que sont nom
    				// et on le met dans l'année en cours
    				File file = new File(dossierUplaod + dateDirectory, id+"_"+date
    						+ ".pdf");
     
    				log.debug(file.getAbsolutePath());
     
    				// on écrit le fichier
    				item.write(file);
    				log.debug("fichier uploader : status ok");
     
    			}
    		}
    		catch (FileUploadException ex) {
    			log.error("Impossible de faire un parsing du request", ex);
    		}
    		catch (Exception ex) {
    			log.error("Impossible d'uploader le fichier", ex);
    		}
    	}
    }
    Merci pour votre aide
    Rudy
    Ryle Software
    www.rylesoftware.com

  2. #2
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour

    dans ta boucle while tu peux recuperer le nom du fichier uploader ainsi que son extension

    http://commons.apache.org/fileupload/faq.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    List<String> listOfExtensions = new ArrayList<String>(3);
    listOfExtensions.add("doc");
    listOfExtensions.add("docx");
    listOfExtensions.add("pdf");
     
    while (itr.hasNext()) {
    FileItem item = (FileItem) itr.next();
    String fileName = item.getName();
        if (fileName != null) {
            filename = FilenameUtils.getName(filename);
        }
    //ici après avoir recuperer le nom tu peux utiliser lastIndexOf par exemple
           String extension  = filename.substring(filename.lastIndexOf("."));//je suppose qu'il y a mieux que ça ... 
    //
    if (!listOfExtensions.contains(extension)){
    //tu traites ton erreur, soit en lançant une exception personnalisée, ou autre 
    }
     }

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 132
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par isma4 Voir le message
    Bonjour

    dans ta boucle while tu peux recuperer le nom du fichier uploader ainsi que son extension

    http://commons.apache.org/fileupload/faq.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    List<String> listOfExtensions = new ArrayList<String>(3);
    listOfExtensions.add("doc");
    listOfExtensions.add("docx");
    listOfExtensions.add("pdf");
     
    while (itr.hasNext()) {
    FileItem item = (FileItem) itr.next();
    String fileName = item.getName();
        if (fileName != null) {
            filename = FilenameUtils.getName(filename);
        }
    //ici après avoir recuperer le nom tu peux utiliser lastIndexOf par exemple
           String extension  = filename.substring(filename.lastIndexOf("."));//je suppose qu'il y a mieux que ça ... 
    //
    if (!listOfExtensions.contains(extension)){
    //tu traites ton erreur, soit en lançant une exception personnalisée, ou autre 
    }
     }
    super merci pour l'info tu m'a permis de régler le problème

    pour info tu dit ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String extension  = filename.substring(filename.lastIndexOf("."));//je suppose qu'il y a mieux que ça ...
    en effet j'ai trouver avec la classe FilenameUtils tu à la méthode getExtension

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String fileExtensionName = item.getName();
    				fileExtensionName = FilenameUtils
    						.getExtension(fileExtensionName);
    Enfin voilà tu m'a donner les infos utile encore merci

    pour info on ne sais jamais ça peux aider d'autre personne, voici ma méthode pour l'upload de fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    /**
    	 * Méthode pour l'upload de fichier sur le disque dur
    	 * 
    	 * @author Rudy Lemaitre
    	 * @param id
    	 *            : id du dossier lier au documents
    	 * @param request
    	 *            : le fichier à uploader
    	 * @return Boolean : si le fichier à la bonne extention alors la méthode
    	 *         retourne True, si le fichier n'a pas la bonne extension alors la
    	 *         méthode retourne False
    	 */
    	public Boolean UploadFile(String id, HttpServletRequest request) {
    		Boolean validation = false;
     
    		// On prépare les extension de fichier qui seront accepter en upload
    		List<String> listOfExtensions = new ArrayList<String>(5);
    		listOfExtensions.add("pdf");
    		listOfExtensions.add("doc");
    		listOfExtensions.add("docx");
    		listOfExtensions.add("xls");
    		listOfExtensions.add("xlsx");
     
    		// Création du format de la date pour le répertoire
    		SimpleDateFormat dateFormatDirectory = new SimpleDateFormat("yyyy");
    		String dateDirectory = dateFormatDirectory.format(new Date());
    		// Création du format de la date pour le fichier
    		SimpleDateFormat dateFormat = new SimpleDateFormat(
    				"yyyy_MM_dd-HH-mm-ss");
    		String date = dateFormat.format(new Date());
     
    		// on prépare pour l'envoie par la mise en oeuvre en mémoire
    		DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
     
    		ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
    		try {
    			List<FileItem> items = (List<FileItem>) uploadHandler
    					.parseRequest(request);
     
    			Iterator<FileItem> itr = (Iterator<FileItem>) items.iterator();
    			// au besoin on creer le dossier principal des archive et le sous
    			// dossier qui correspond à l'année en cour
    			new File(dossierUplaod + dateDirectory).mkdirs();
     
    			while (itr.hasNext()) {
    				FileItem item = (FileItem) itr.next();
     
    				// on récupère l'extension du fichier qui est uploader
    				String fileExtensionName = item.getName();
    				fileExtensionName = FilenameUtils
    						.getExtension(fileExtensionName);
    				log.debug("Récupération de l'extension du fichier terminée");
     
    				// on donne le chemin d'écriture au fichier ainsi que sont nom
    				// et on le met dans l'année en cours
    				File file = new File(dossierUplaod + dateDirectory, id + "_"
    						+ date + "." + fileExtensionName);
     
    				log.debug(file.getAbsolutePath());
     
    				// on vérifie si les extensions des fichier uploader sont
    				// acceptée ou pas
    				if (listOfExtensions.contains(fileExtensionName)) {
    					// on écrit le fichier sur le disque dur
    					item.write(file);
    					log.debug("fichier uploader : status ok");
     
    					// on écrit les informations de l'upload dans la db
    					AddDocumentLinkDAO documentLink = new AddDocumentLinkMySqlImpl();
     
    					try {
    						documentLink.addDocumentLink(id, file.getName(),
    								file.getAbsolutePath());
    						log.debug("Lien physique du fichier ajouter en base de données");
     
    						// on valide pour la valeur de retour;
    						validation = true;
    					}
    					catch (Exception e) {
    						log.error("Impossible d'ajouter le lien physique du document en base de données");
    						e.printStackTrace();
    					}
    				}
    				else {
    					log.error("L'extention du fichier n'est pas valide");
    				}
     
    			}
    		}
    		catch (FileUploadException ex) {
    			log.error("Impossible de faire un parsing du request", ex);
    		}
    		catch (Exception ex) {
    			log.error("Impossible d'uploader le fichier", ex);
    		}
    		return validation;
    	}
    Ryle Software
    www.rylesoftware.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 08/06/2011, 12h55
  2. find sur plusieurs types de fichier
    Par sofiane80 dans le forum Linux
    Réponses: 3
    Dernier message: 12/10/2009, 12h23
  3. Restrictions sur un type decimal
    Par fremen167 dans le forum Valider
    Réponses: 5
    Dernier message: 11/03/2009, 11h55
  4. Contrôler le type de fichier uploadé
    Par Emilie012 dans le forum Langage
    Réponses: 3
    Dernier message: 01/10/2008, 10h30
  5. Réponses: 10
    Dernier message: 18/11/2003, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo