2017-03-28 3 views
0

Java SE 8 est livré avec le Servlet Spec 3.0, donc j'ai pensé qu'il serait très facile de traiter une requête POST en plusieurs parties, mais j'avais tort.Comment récupérer une requête POST en plusieurs parties dans Java SE 8?

Je reçois toujours zéro partie, bien que je vois dans le débogueur de réseau Chrome que la charge utile contient deux images!

Qu'est-ce que je fais mal?

Voici mon code Java traitement de la requête POST:

if (request.isMultipartRequest()) { 
    Collection<Part> parts = request.getParts(); 
    log.info("number of parts: "+parts.size()); 
    for (Part part : parts) { 
    String fileName = getFileName(part); 
    log.info("fileName = "+fileName); 
    } 
} 
... 

private String getFileName(Part part) { 
    String contentDisp = part.getHeader("content-disposition"); 
    System.out.println("content-disposition header= "+contentDisp); 
    String[] tokens = contentDisp.split(";"); 
    for (String token : tokens) { 
     if (token.trim().startsWith("filename")) { 
      return token.substring(token.indexOf("=") + 2, token.length()-1); 
     } 
    } 
    return ""; 
} 

Il enregistre toujours 0 parties.

J'utilise Tomcat 7 et Java SE 8.

Je pense aussi qu'il est très bizarre d'avoir cette méthode getFileName() dans mon code, je m'y attendais Java 8 à faire pour moi ...

Tous les conseils sur comment faire ce travail sont très appréciés!

+0

Vous mélangez vraiment des termes - Java 8 n'est pas directement lié à la spécification de Servlet - Java EE (JEE) l'est. De toute façon, vous semblez avoir trouvé [le tutoriel] (http://docs.oracle.com/javaee/6/tutorial/doc/glraq.html) - avez-vous suivi tout cela? – stdunbar

+0

@stdunbar oui vous avez raison, Servlet 3.0 est livré avec Tomcat 7 fonctionnant sous Java 8 (dans mon cas spécifique). Désolé. – basZero

Répondre

0

ÉDITÉ J'ai enlevé mes avant-premières réponse, car il y a une bien meilleure: https://stackoverflow.com/a/2424824/1484621 Je pense que cela vous aidera. Pour clarifier, Java SE 8 et Servlet Spec 3.0 ne sont pas liés ensemble, Sevlet 3.0 peut fonctionner avec java 7 si ce n'est des versions plus anciennes. La spécification de servlet publiée par les conteneurs, et à partir de là l'erreur que vous avez trouvée peut-être dépendante du conteneur, passez à un autre conteneur (Tomcat/Jetty/GlassFish) et réessayez. Bonne chance!

+0

Cela semble assez complexe pour une approche Java SE 8 moderne, mais je vais y jeter un coup d'œil. Merci. Il doit y avoir une bien meilleure solution que celle-ci !!! – basZero

+0

Le code ne compile pas comme ça. Où obtenez-vous le champ statique 'UPLOADEDFILENAME_ATTRIBUTE'? – basZero

+0

De plus, la classe référencée 'UploadFile' à la fin de l'extrait de code n'existe pas dans commons-fileupload 1.3 – basZero