Voila , j'ai un formulaire upload.jsp ou j'entre la description dans un champ text et j'ai un autre champ file , ou je met mon fichier , je veux après avoir cliquer sur le bouton Envoyer , afficher devant chaque champ le nom que j'ai déja ecris dans le champ descripton et le nom du fichier que j'ai uploader , sauf que ca me donne l'erreur : Etat HTTP 500 - java.lang.NullPointerException com.fichier.upload.Upload.getNomFichier(Upload.java:85) com.fichier.upload.Upload.doPost(Upload.java:61) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
/* * Les données reçues sont multipart, on doit donc utiliser la méthode * getPart() pour traiter le champ d'envoi de fichiers. */ Part part = request.getPart( CHAMP_FICHIER );
/* * Il faut déterminer s'il s'agit d'un champ classique ou d'un champ de * type fichier : on délègue cette opération à la méthode utilitaire * getNomFichier(). */ String nomFichier = getNomFichier( part );
/* * Si la méthode a renvoyé quelque chose, il s'agit donc d'un champ de * type fichier (input type="file" ). */ if ( nomFichier != null && !nomFichier.isEmpty() ) { String nomChamp = part.getName(); request.setAttribute( nomChamp, nomFichier ); }
/* * Méthode utilitaire qui a pour unique but d'analyser l'en-tête * "content-disposition", et de vérifier si le paramètre "filename" y est * présent. Si oui, alors le champ traité est de type File et la méthode * retourne son nom, sinon il s'agit d'un champ de formulaire classique et * la méthode retourne null. */ private static String getNomFichier( Part part ) { /* Boucle sur chacun des paramètres de l'en-tête "content-disposition". */ for ( String contentDisposition : part.getHeader( "content-disposition" ).split( ";" ) ) { /* Recherche de l'éventuelle présence du paramètre "filename". */ if ( contentDisposition.trim().startsWith( "filename" ) ) { /* * Si "filename" est présent, alors renvoi de sa valeur, * c'est-à-dire du nom de fichier. */ return contentDisposition.substring( contentDisposition.indexOf( '=' ) + 1 ); } } /* Et pour terminer, si rien n'a été trouvé... */ return null;
Marsh Posté le 23-07-2013 à 12:30:33
Voila , j'ai un formulaire upload.jsp ou j'entre la description dans un champ text et j'ai un autre champ file , ou je met mon fichier , je veux après avoir cliquer sur le bouton Envoyer , afficher devant chaque champ le nom que j'ai déja ecris dans le champ descripton et le nom du fichier que j'ai uploader , sauf que ca me donne l'erreur : Etat HTTP 500 - java.lang.NullPointerException
com.fichier.upload.Upload.getNomFichier(Upload.java:85)
com.fichier.upload.Upload.doPost(Upload.java:61)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
Voila mon formulaire upload.jsp :
<form action="Upload" method="post" enctype="multipart/form-data">
Description : <input type="text" name="descrip"/> ${description}<br>
Fichier : <input type="file" name="fiche"/> ${fiche}<br>
<input type="submit" value="Envoyer"/>
</form>
Et voila ma servlet Upload ou je fais mon traitement :
public class Upload extends HttpServlet {
public static final String CHAMP_DESCRIPTION = "description";
public static final String CHAMP_FICHIER = "fiche";
protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
IOException {
this.getServletContext().getRequestDispatcher( "/WEB-INF/upload.jsp" ).forward( request, response );
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
IOException {
String description = request.getParameter( "descrip" );
request.setAttribute( CHAMP_DESCRIPTION, description );
/*
* Les données reçues sont multipart, on doit donc utiliser la méthode
* getPart() pour traiter le champ d'envoi de fichiers.
*/
Part part = request.getPart( CHAMP_FICHIER );
/*
* Il faut déterminer s'il s'agit d'un champ classique ou d'un champ de
* type fichier : on délègue cette opération à la méthode utilitaire
* getNomFichier().
*/
String nomFichier = getNomFichier( part );
/*
* Si la méthode a renvoyé quelque chose, il s'agit donc d'un champ de
* type fichier (input type="file" ).
*/
if ( nomFichier != null && !nomFichier.isEmpty() ) {
String nomChamp = part.getName();
request.setAttribute( nomChamp, nomFichier );
}
this.getServletContext().getRequestDispatcher( "/WEB-INF/upload.jsp" ).forward( request, response );
}
/*
* Méthode utilitaire qui a pour unique but d'analyser l'en-tête
* "content-disposition", et de vérifier si le paramètre "filename" y est
* présent. Si oui, alors le champ traité est de type File et la méthode
* retourne son nom, sinon il s'agit d'un champ de formulaire classique et
* la méthode retourne null.
*/
private static String getNomFichier( Part part ) {
/* Boucle sur chacun des paramètres de l'en-tête "content-disposition". */
for ( String contentDisposition : part.getHeader( "content-disposition" ).split( ";" ) ) {
/* Recherche de l'éventuelle présence du paramètre "filename". */
if ( contentDisposition.trim().startsWith( "filename" ) ) {
/*
* Si "filename" est présent, alors renvoi de sa valeur,
* c'est-à-dire du nom de fichier.
*/
return contentDisposition.substring( contentDisposition.indexOf( '=' ) + 1 );
}
}
/* Et pour terminer, si rien n'a été trouvé... */
return null;
}
}
MErci