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

Développement Web en Java Discussion :

Formulaire et Upload


Sujet :

Développement Web en Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Par défaut Formulaire et Upload
    Bonjour,

    Je développe une Api qui doit pouvoir gérer l'upload de fichier.
    J'ai créer une jsp avec un petit formulaire pour renseigner les meta-données du document upload.

    Mon upload fonctionne très bien.
    J'utilise les librairies apache.commons.fileupload comme beaucoups de tutoriel préconise.

    Mon problème se situe ici :

    Si je récupère les paramètres de mon formulaire avant l'upload. L'upload n'a pas lieu.
    Si je les récupère apres l'upload, je récupère des données "null".

    Je pense que mon problème est lié a l'objet FileItem.
    Notamment à la ligne :
    List<FileItem> itemsSet = upload.parseRequest(request);

    Ce que je ne comprend pas c'est en quoi récupérer des données via la méthode getParameters() empèche la suite du processus d'upload?




    Je vous post mon code actuel de la Servlet :
    (la partie insertion Mysql est en commentaire pour éviter d'upload du "null" à chaque fois.)

    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
     
    @WebServlet(name = "UploadFile", urlPatterns = "/UploadFile")
    @Multipart
    public class UploadFile extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
    	// ATTRIBUTES DE LA REQUETE
    	private static final String ATTR_FILE = "file";
    	private static final String ATTR_UPLOADS_DIRECTORY = "uploads-directory";
     
    	private static final String VIEW1 = "/WEB-INF/web/upload.jsp";
    	private static final String VIEW2 = "/WEB-INF/web/Ok.jsp";
    	private static final String VIEW3 = "/WEB-INF/web/NonOk.jsp";
     
    	private String uploadsdirectory = new String();
     
    	// OBJET POUR LE CONTROL DE LA TAILLE DU FICHIER
    	private static final int THRESHOLD_SIZE = 1024 * 1024 * 30; // 30MB
    	private static final int MAX_FILE_SIZE = 1024 * 1024 * 500; // 500MB
    	private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 500; // 500MB
     
    	private AbstractDAO<Fichier> fichierDao;
     
     
    	// POINT D'ENTRE AU SERVLET / LIKE A CONSTRUCTOR
    	public void init() throws ServletException {
    		// RECUPERATION DU CHEMAIN (REPERTOIRE) POUR LES FICHIERS TEMPORAIRES
    		this.uploadsdirectory = this.getServletContext().getInitParameter(
    				ATTR_UPLOADS_DIRECTORY);
     
    		// VERIFICATION DE L EXISTENCE DU REPERTOIRE UPLOADS
    		this.directoryCreator(this.uploadsdirectory);
     
    		this.fichierDao = FactoryDAO.getFichierDAO();
    	}
     
    	protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
     
    	this.getServletContext().getRequestDispatcher(VIEW1)
    				.forward(request, response);
    	}
     
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
     
     
     
    		if (new File(this.uploadsdirectory).exists()) {
     
    			// OBJET METIER SET POUR UPLOADER UN FICHIER
    			ServletFileUpload upload = null;
     
    			AbstractFileUpload uploader = new PDFFileUpload(this.uploadsdirectory);
    			AbstractFileUpload uploader2 = new UploadAnyFile(this.uploadsdirectory);
     
     
    				String nomFichier = (String) request.getParameter("Nom");
    				String auteurFichier = (String) request.getParameter("Auteur");
    				String descriptionFichier = (String) request.getParameter("Description");
    				String typeFichier = (String) request.getParameter("Type");
    				System.out.println(nomFichier + auteurFichier+ descriptionFichier + typeFichier);
     
     
     
     
    				if (ServletFileUpload.isMultipartContent(request)) {
    					 try
    					 {
     
    // PRETRATITEMENT POUR CONTROLER LA TAILLER DU FICHIER
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(THRESHOLD_SIZE);
    factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
    upload = new ServletFileUpload(factory);
    upload.setFileSizeMax(MAX_FILE_SIZE);
    upload.setSizeMax(MAX_REQUEST_SIZE);
     
    // OBTIEN LISTE DE ITEMS(INPUTs) DU FORMULAIRE ENVOYES PAR
    // POST
    List<FileItem> itemsSet = upload.parseRequest(request);
    int itemsSetSize = itemsSet.size();
     
    					for (int i = 0; i < itemsSetSize; i++) {
     
     
    						if (!itemsSet.get(i).isFormField()) {
    							uploader.upload(itemsSet.get(i)); // OBJET METIER
    																// ENCHARGER
    																// D'UPLOADER LE
    																// FICHIER
     
    							if (!uploader.getErrors().isEmpty()) {
    								uploader.setErrors(null, null);
    								uploader2.upload(itemsSet.get(i));
     
    							}
    						}
    					}
     
    					// AJOUT D'ATTRIBUTES A LA REQUETE
    					request.setAttribute(ATTR_FILE, uploader);
     
    					// REDIRECTION VERS LA VUE CORRESPONDANTE
    					if (!uploader2.getErrors().isEmpty()) {
     
    						this.getServletContext().getRequestDispatcher(VIEW3)
    								.forward(request, response);
    					} else {
     
    						this.getServletContext().getRequestDispatcher(VIEW2)
    								.forward(request, response);
    					}
     
     
    				// CREATION DUN OBJET FICHIER A PARTIR DES METADONNEES
    					/*
    					 * Fichier fichier=new Fichier();
    					 * 
    					 * fichier.setNom(nomFichier);
    					 * fichier.setAuteur(auteurFichier);
    					 * fichier.setDescription(descriptionFichier);
    					 * fichier.setType(typeFichier);
    					 * 
    					 * fichier.setId(uploader.getFilecode());
    					 * fichier.setSize(uploader.getFilesize());
    					 * fichier.setFormat(uploader.getFileformat());
    					 * 
    					 * 
    					 * fichier.setId(uploader2.getFilecode());
    					 * fichier.setSize(uploader2.getFilesize());
    					 * fichier.setFormat(uploader2.getFileformat());
    					 * 
    					 * 
    					 * System.out.println(fichier.toString());
    					 * this.fichierDao.create(fichier);
    					 */
     
    				}
    			 catch (Exception e) {
    				// ON PDFUPLOADER ERROR LIST
    				uploader.setErrors("size","The selected file exceeds the size allowed by the server");
     
    				// ON SERVER
    				System.out.println(this.getClass().getName()
    						+ ".multipart():\n" + e.getMessage());
    			}
    				}
     
    		}
     
    	}
     
    	/** METHODE QUI GERE LA CREATION DE REPERTOIRES **/
    	private void directoryCreator(String directoryname) {
    		if (!new File(directoryname).exists()) {
    			try {
    				// CREATION DU REPERTOIRE
    				new File(directoryname).mkdir();
    			} catch (Exception e) {
    				// REPPORTINF ERROR ON SERVER
    				System.out.println(this.getClass().getName()
    						+ ".directoryCreator():\n" + e.getMessage());
    			}
    		}
    	}
     
    }

    Voila.
    J'ai voulu utiliser la classe MultipartRequest mais cela ne correspond pas à ce que je veux faire ensuite et implique trop de changement.
    Je le repète l'upload fonctionne très bien sans récupérer les paramètres du POST.



    Merci,


    Dastiny.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Par défaut
    Mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(itemsSet.size());
    Vaut 6 sans mes getParameters();
    (4gets, 1fichier, 1boutton envoyer) et vallent tous null sauf le fichier.

    Il vaut 0 des que je recupère mes données avant.
    Du coup la suite n'a pas lieu et je n'upload rien du tout.

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 251
    Par défaut
    A partir du moment ou tu upload un fichier, c'est nécessairement du multipart.
    De ce que je vois dans la javadoc, en bouclant sur la liste des FileItem tu devrait pouvoir t'en sortir avec la méthode isFormField():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    List<FileItem> lFields =  upload.parseRequest(httpServletRequest);
    for (final FileItem fItem : lFields){
       if (fItem.isFormField()){
         final String fieldName = fItem.getName();
         final String fieldValue = fItem.getString();
      }
    }

Discussions similaires

  1. PERL CGI Formulaire et upload
    Par minusette dans le forum Web
    Réponses: 3
    Dernier message: 20/07/2007, 11h08
  2. formulaire avec upload
    Par Sheriff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/12/2006, 08h51
  3. [Upload] Formulaire puis Upload via FTP
    Par FredMines dans le forum Langage
    Réponses: 11
    Dernier message: 13/07/2006, 16h36
  4. formulaire avec upload
    Par sami_c dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2006, 12h04
  5. Probleme de formulaire d'upload
    Par Oberown dans le forum ASP
    Réponses: 5
    Dernier message: 26/10/2004, 14h00

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