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 :

Impossible de capturer IllegalStateException


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut Impossible de capturer IllegalStateException
    Bonjour

    J'essaie d'envoyer un fichier lourd depuis mon formulaire, c'est-à-dire un fichier qui dépasse définit dans mon web.xml mais le message d'erreur que j'ai prévu pour ça ne s'affiche pas dans ma page jsp:

    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
    private String validationImage( HttpServletRequest request, String chemin ) throws FormValidationException {
            /*
             * Récupération du contenu du champ image du formulaire. Il faut ici
             * utiliser la méthode getPart().
             */
            String nomFichier = null;
            InputStream contenuFichier = null;
            try {
                Part part = request.getPart( CHAMP_IMAGE );
     
     
                nomFichier = getNomFichier( part );
     
                /*
                 * Si la méthode getNomFichier() a renvoyé quelque chose, il s'agit
                 * donc d'un champ de type fichier (input type="file").
                 */
                if ( nomFichier != null && !nomFichier.isEmpty() ) {
                    /*
                     * Antibug pour Internet Explorer, qui transmet pour une raison
                     * mystique le chemin du fichier local à la machine du client...
                     * 
                     * Ex : C:/dossier/sous-dossier/fichier.ext
                     * 
                     * On doit donc faire en sorte de ne sélectionner que le nom et
                     * l'extension du fichier, et de se débarrasser du superflu.
                     */
                    nomFichier = nomFichier.substring( nomFichier.lastIndexOf( '/' ) + 1 )
                            .substring( nomFichier.lastIndexOf( '\\' ) + 1 );
     
                    /* Récupération du contenu du fichier */
                    contenuFichier = part.getInputStream();
     
                    /* Extraction du type MIME du fichier depuis l'InputStream */
                    MimeUtil.registerMimeDetector( "eu.medsea.mimeutil.detector.MagicMimeMimeDetector" );
                    Collection<?> mimeTypes = MimeUtil.getMimeTypes( contenuFichier );
     
                    /*
                     * Si le fichier est bien une image, alors son en-tête MIME
                     * commence par la chaîne "image"
                     */
                    if ( mimeTypes.toString().startsWith( "image" ) ) {
                        /* Écriture du fichier sur le disque */
                        ecrireFichier( contenuFichier, nomFichier, chemin );
                    } else {
                        throw new FormValidationException( "Le fichier envoyé doit être une image." );
                    }
                }
     
     
     
            } catch ( NullPointerException  e ) {
                /*
                 * Exception retournée si la taille des données dépasse les limites
                 * définies dans la section <multipart-config> de la déclaration de
                 * notre servlet d'upload dans le fichier web.xml
                 */
     
                throw new FormValidationException( "Le fichier ne doit pas être vide." );
            }
     
     
            catch ( IllegalStateException e ) {
                /*
                 * Exception retournée si la taille des données dépasse les limites
                 * définies dans la section <multipart-config> de la déclaration de
                 * notre servlet d'upload dans le fichier web.xml
                 */
                e.printStackTrace();
                throw new FormValidationException( "Le fichier envoyé ne doit pas dépasser 1Mo." );
            } catch ( IOException e ) {
                /*
                 * Exception retournée si une erreur au niveau des répertoires de
                 * stockage survient (répertoire inexistant, droits d'accès
                 * insuffisants, etc.)
                 */
                e.printStackTrace();
                throw new FormValidationException( "Erreur de configuration du serveur." );
            } catch ( ServletException e ) {
                /*
                 * Exception retournée si la requête n'est pas de type
                 * multipart/form-data.
                 */
                e.printStackTrace();
                throw new FormValidationException(
                        "Ce type de requête n'est pas supporté, merci d'utiliser le formulaire prévu pour envoyer votre fichier." );
            }
     
            return nomFichier;
        }
    J'arrive pourtant à voir l'exception dans mon netbeans grâce au e.printStackTrace():

    java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
    at org.apache.catalina.connector.Request.parseParts(Request.java:2804)
    at org.apache.catalina.connector.Request.parseParameters(Request.java:3073)
    at org.apache.catalina.connector.Request.getParameter(Request.java:1095)
    at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:380)
    at org.netbeans.modules.web.monitor.server.MonitorRequestWrapper.getParameter(MonitorRequestWrapper.java:199)
    at forms.CreationProduitForm.getValeurChamp(CreationProduitForm.java:255)
    at forms.CreationProduitForm.creerProduit(CreationProduitForm.java:54)
    at servlets.AjoutProduit.doPost(AjoutProduit.java:52)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
    at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:811)
    at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)
    at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)
    at org.apache.catalina.connector.Request.parseParts(Request.java:2734)
    ... 33 more
    java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
    at org.apache.catalina.connector.Request.parseParts(Request.java:2804)
    at org.apache.catalina.connector.Request.parseParameters(Request.java:3073)
    at org.apache.catalina.connector.Request.getParameter(Request.java:1095)
    at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:380)
    at org.netbeans.modules.web.monitor.server.MonitorRequestWrapper.getParameter(MonitorRequestWrapper.java:199)
    at forms.CreationProduitForm.getValeurChamp(CreationProduitForm.java:255)
    at forms.CreationProduitForm.creerProduit(CreationProduitForm.java:54)
    at servlets.AjoutProduit.doPost(AjoutProduit.java:52)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
    at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:811)
    at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)
    at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)
    at org.apache.catalina.connector.Request.parseParts(Request.java:2734)
    ... 33 more
    J'arrive aussi à afficher les messages d'erreur lorsque par exemple le champ est vide, ou lorsque le répertoire de destination est inexistant, mais pour le dépassement de taille de fichier, le message d'erreur "Le fichier envoyé ne doit pas dépasser 1Mo" ne s'affiche pas.

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 80
    Par défaut
    Bonjour,

    En effet, l'erreur est bien produite lorsque vous tentez d'obtenir les Part de la demande en appelant HttpServletRequest.getParts () ou HttpServletRequest.getPart ().
    Mais au vu du message d'erreur, on dirait que celui-ci tourne en boucle.

    Dans votre fichier web.xml, avez-vous bien défini le max-file-size et le max-request-size ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <multipart-config>
        <location>/tmp</location>
        <max-file-size>20848820</max-file-size>
        <max-request-size>418018841</max-request-size>
        <file-size-threshold>1048576</file-size-threshold>
    </multipart-config>
    Je vais regarder avec une de mes applications.

    Bonne journée

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 80
    Par défaut
    Ou sinon, pouvez vous essayez ceci :

    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
       private String validationImage(HttpServletRequest request, String chemin) throws FormValidationException {
            /*
             * Récupération du contenu du champ image du formulaire. Il faut ici
             * utiliser la méthode getPart().
             */
            String nomFichier = null;
            InputStream contenuFichier = null;
            Part part;
            try {
     
                part = request.getPart(CHAMP_IMAGE);
     
            } catch (IllegalStateException e) {
                /*
                 * Exception retournée si la taille des données dépasse les limites
                 * définies dans la section <multipart-config> de la déclaration de
                 * notre servlet d'upload dans le fichier web.xml
                 */
                e.printStackTrace();
                throw new FormValidationException("Le fichier envoyé ne doit pas dépasser 1Mo.");
     
            }catch (NullPointerException e) {
                /*
                 * Exception retournée si la taille des données dépasse les limites
                 * définies dans la section <multipart-config> de la déclaration de
                 * notre servlet d'upload dans le fichier web.xml
                 */
     
                throw new FormValidationException("Le fichier ne doit pas être vide.");
     
            }
     
            try {
     
                nomFichier = getNomFichier(part);
     
                /*
                 * Si la méthode getNomFichier() a renvoyé quelque chose, il s'agit
                 * donc d'un champ de type fichier (input type="file").
                 */
                if (nomFichier != null && !nomFichier.isEmpty()) {
                    /*
                     * Antibug pour Internet Explorer, qui transmet pour une raison
                     * mystique le chemin du fichier local à la machine du client...
                     * 
                     * Ex : C:/dossier/sous-dossier/fichier.ext
                     * 
                     * On doit donc faire en sorte de ne sélectionner que le nom et
                     * l'extension du fichier, et de se débarrasser du superflu.
                     */
                    nomFichier = nomFichier.substring(nomFichier.lastIndexOf('/') + 1)
                            .substring(nomFichier.lastIndexOf('\\') + 1);
     
                    /* Récupération du contenu du fichier */
                    contenuFichier = part.getInputStream();
     
                    /* Extraction du type MIME du fichier depuis l'InputStream */
                    MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
                    Collection<?> mimeTypes = MimeUtil.getMimeTypes(contenuFichier);
     
                    /*
                     * Si le fichier est bien une image, alors son en-tête MIME
                     * commence par la chaîne "image"
                     */
                    if (mimeTypes.toString().startsWith("image")) {
                        /* Écriture du fichier sur le disque */
                        ecrireFichier(contenuFichier, nomFichier, chemin);
                    } else {
                        throw new FormValidationException("Le fichier envoyé doit être une image.");
                    }
                }
     
            } catch (IOException e) {
                /*
                 * Exception retournée si une erreur au niveau des répertoires de
                 * stockage survient (répertoire inexistant, droits d'accès
                 * insuffisants, etc.)
                 */
                e.printStackTrace();
                throw new FormValidationException("Erreur de configuration du serveur.");
            } catch (ServletException e) {
                /*
                 * Exception retournée si la requête n'est pas de type
                 * multipart/form-data.
                 */
                e.printStackTrace();
                throw new FormValidationException(
                        "Ce type de requête n'est pas supporté, merci d'utiliser le formulaire prévu pour envoyer votre fichier.");
            }
     
            return nomFichier;
        }
    Bonne journée

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Citation Envoyé par Millezime Voir le message
    Ou sinon, pouvez vous essayez ceci :

    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
       private String validationImage(HttpServletRequest request, String chemin) throws FormValidationException {
            /*
             * Récupération du contenu du champ image du formulaire. Il faut ici
             * utiliser la méthode getPart().
             */
            String nomFichier = null;
            InputStream contenuFichier = null;
            Part part;
            try {
     
                part = request.getPart(CHAMP_IMAGE);
     
            } catch (IllegalStateException e) {
                /*
                 * Exception retournée si la taille des données dépasse les limites
                 * définies dans la section <multipart-config> de la déclaration de
                 * notre servlet d'upload dans le fichier web.xml
                 */
                e.printStackTrace();
                throw new FormValidationException("Le fichier envoyé ne doit pas dépasser 1Mo.");
     
            }catch (NullPointerException e) {
                /*
                 * Exception retournée si la taille des données dépasse les limites
                 * définies dans la section <multipart-config> de la déclaration de
                 * notre servlet d'upload dans le fichier web.xml
                 */
     
                throw new FormValidationException("Le fichier ne doit pas être vide.");
     
            }
     
            try {
     
                nomFichier = getNomFichier(part);
     
                /*
                 * Si la méthode getNomFichier() a renvoyé quelque chose, il s'agit
                 * donc d'un champ de type fichier (input type="file").
                 */
                if (nomFichier != null && !nomFichier.isEmpty()) {
                    /*
                     * Antibug pour Internet Explorer, qui transmet pour une raison
                     * mystique le chemin du fichier local à la machine du client...
                     * 
                     * Ex : C:/dossier/sous-dossier/fichier.ext
                     * 
                     * On doit donc faire en sorte de ne sélectionner que le nom et
                     * l'extension du fichier, et de se débarrasser du superflu.
                     */
                    nomFichier = nomFichier.substring(nomFichier.lastIndexOf('/') + 1)
                            .substring(nomFichier.lastIndexOf('\\') + 1);
     
                    /* Récupération du contenu du fichier */
                    contenuFichier = part.getInputStream();
     
                    /* Extraction du type MIME du fichier depuis l'InputStream */
                    MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
                    Collection<?> mimeTypes = MimeUtil.getMimeTypes(contenuFichier);
     
                    /*
                     * Si le fichier est bien une image, alors son en-tête MIME
                     * commence par la chaîne "image"
                     */
                    if (mimeTypes.toString().startsWith("image")) {
                        /* Écriture du fichier sur le disque */
                        ecrireFichier(contenuFichier, nomFichier, chemin);
                    } else {
                        throw new FormValidationException("Le fichier envoyé doit être une image.");
                    }
                }
     
            } catch (IOException e) {
                /*
                 * Exception retournée si une erreur au niveau des répertoires de
                 * stockage survient (répertoire inexistant, droits d'accès
                 * insuffisants, etc.)
                 */
                e.printStackTrace();
                throw new FormValidationException("Erreur de configuration du serveur.");
            } catch (ServletException e) {
                /*
                 * Exception retournée si la requête n'est pas de type
                 * multipart/form-data.
                 */
                e.printStackTrace();
                throw new FormValidationException(
                        "Ce type de requête n'est pas supporté, merci d'utiliser le formulaire prévu pour envoyer votre fichier.");
            }
     
            return nomFichier;
        }
    Bonne journée
    J'ai essayé ça mais le problème est que les autres exceptions telles que NullPointerException, IOException, etc...ne s'affichent plus.

    Concernant le ichier web.xml, j'ai bien défini le max-file-size et le max-request-size:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     <servlet>
            <servlet-name>AjoutProduit</servlet-name>
            <servlet-class>servlets.AjoutProduit</servlet-class>
            <init-param>
                <param-name>chemin</param-name>
                <param-value>/fichiers/images/</param-value>
            </init-param>
            <multipart-config>
                <location>c:/fichiers/images</location>
                 <max-file-size>2097152</max-file-size> <!-- 2 Mo -->
                <max-request-size>10485760</max-request-size> <!-- 5 x 2Mo -->
                <file-size-threshold>1048576</file-size-threshold> <!-- 1 Mo -->
            </multipart-config>
        </servlet>

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 80
    Par défaut
    Bonjour,

    Je pense que votre problème provient d'une hiérarchie d’exception.
    Pouvez-vous essayez ce code ?

    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
    private String validationImage( HttpServletRequest request, String chemin ) throws FormValidationException {
            /*
             * Récupération du contenu du champ image du formulaire. Il faut ici
             * utiliser la méthode getPart().
             */
            String nomFichier = null;
            InputStream contenuFichier = null;
            try {
                Part part = request.getPart( CHAMP_IMAGE );
     
                if(part.getSize()==0){
                    /*
                     * Exception retournée si la taille des données dépasse les limites
                     * définies dans la section <multipart-config> de la déclaration de
                     * notre servlet d'upload dans le fichier web.xml
                     */
     
                    throw new FormValidationException( "Le fichier ne doit pas être vide." );
                }
     
                nomFichier = getNomFichier( part );
     
                /*
                 * Si la méthode getNomFichier() a renvoyé quelque chose, il s'agit
                 * donc d'un champ de type fichier (input type="file").
                 */
                if ( nomFichier != null && !nomFichier.isEmpty() ) {
                    /*
                     * Antibug pour Internet Explorer, qui transmet pour une raison
                     * mystique le chemin du fichier local à la machine du client...
                     * 
                     * Ex : C:/dossier/sous-dossier/fichier.ext
                     * 
                     * On doit donc faire en sorte de ne sélectionner que le nom et
                     * l'extension du fichier, et de se débarrasser du superflu.
                     */
                    nomFichier = nomFichier.substring( nomFichier.lastIndexOf( '/' ) + 1 )
                            .substring( nomFichier.lastIndexOf( '\\' ) + 1 );
     
                    /* Récupération du contenu du fichier */
                    contenuFichier = part.getInputStream();
     
                    /* Extraction du type MIME du fichier depuis l'InputStream */
                    MimeUtil.registerMimeDetector( "eu.medsea.mimeutil.detector.MagicMimeMimeDetector" );
                    Collection<?> mimeTypes = MimeUtil.getMimeTypes( contenuFichier );
     
                    /*
                     * Si le fichier est bien une image, alors son en-tête MIME
                     * commence par la chaîne "image"
                     */
                    if ( mimeTypes.toString().startsWith( "image" ) ) {
                        /* Écriture du fichier sur le disque */
                        ecrireFichier( contenuFichier, nomFichier, chemin );
                    } else {
                        throw new FormValidationException( "Le fichier envoyé doit être une image." );
                    }
                }
     
            }catch ( IllegalStateException e ) {
                /*
                 * Exception retournée si la taille des données dépasse les limites
                 * définies dans la section <multipart-config> de la déclaration de
                 * notre servlet d'upload dans le fichier web.xml
                 */
                e.printStackTrace();
                throw new FormValidationException( "Le fichier envoyé ne doit pas dépasser 1Mo." );
            } catch ( IOException e ) {
                /*
                 * Exception retournée si une erreur au niveau des répertoires de
                 * stockage survient (répertoire inexistant, droits d'accès
                 * insuffisants, etc.)
                 */
                e.printStackTrace();
                throw new FormValidationException( "Erreur de configuration du serveur." );
            } catch ( ServletException e ) {
                /*
                 * Exception retournée si la requête n'est pas de type
                 * multipart/form-data.
                 */
                e.printStackTrace();
                throw new FormValidationException(
                        "Ce type de requête n'est pas supporté, merci d'utiliser le formulaire prévu pour envoyer votre fichier." );
            }
     
            return nomFichier;
        }
    Sinon, à voir pour réaliser le traitement à l'aide plusieurs méthodes :
    • partEstVide()
    • validerTailleFichier()
    • chercherChemin()
    • ecrireFichier()

    Ainsi, les différents block catch seront séparés et devraient normalement s’exécuter.

    Tenez nous informé.

    Bonne journée

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Je viens de tester ce que tu m'as proposé mais ça ne marche pas toujours.

    Ensuite j'ai pas compris ce que tu veux dire ici:

    Sinon, à voir pour réaliser le traitement à l'aide plusieurs méthodes :

    partEstVide()
    validerTailleFichier()
    chercherChemin()
    ecrireFichier()
    Sinon j'ai changé de serveur, j'ai pris Glassfish 4.0 et bizarrement je n'ai pas la même exception:

    Avertissement: StandardWrapperValve[AjoutProduit]: Servlet.service() for servlet AjoutProduit threw exception
    java.lang.RuntimeException: Error in multipart initialization
    at org.apache.catalina.fileupload.Multipart.init(Multipart.java:99)
    at org.apache.catalina.connector.Request.processParameters(Request.java:1524)
    at org.apache.catalina.connector.Request.getParameter(Request.java:1545)
    at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:448)
    at forms.CreationProduitForm.getValeurChamp(CreationProduitForm.java:254)
    at forms.CreationProduitForm.creerProduit(CreationProduitForm.java:53)
    at servlets.AjoutProduit.doPost(AjoutProduit.java:52)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.servlet.ServletException: the request was rejected because its size (431748586) exceeds the configured maximum (10485760)
    at org.apache.catalina.fileupload.RequestItemIterator.<init>(RequestItemIterator.java:306)
    at org.apache.catalina.fileupload.Multipart.initParts(Multipart.java:144)
    at org.apache.catalina.fileupload.Multipart.init(Multipart.java:97)
    ... 35 more
    Avec Apache tomcat 8.0.27.0 j'ai un IllegalStateException, mais avec Glassfish j'ai un java.lang.RuntimeException.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/06/2014, 15h42
  2. capture flux video impossible
    Par mystercedric dans le forum Firefox
    Réponses: 1
    Dernier message: 09/08/2009, 19h37
  3. Réponses: 4
    Dernier message: 25/11/2008, 17h45
  4. Réponses: 1
    Dernier message: 15/10/2008, 22h27
  5. Réponses: 3
    Dernier message: 01/11/2002, 14h30

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