无法捕获异常

时间:2018-12-24 10:47:47

标签: servlets java-ee try-catch

我正在尝试从表单中发送文件,但是在尝试捕获中无法处理诸如空文件或重文件之类的错误,我也不知道为什么。 这是我的代码:

private String fileValidation( HttpServletRequest request, String chemin, int annee, String mois ) 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_FICHIER );


        nomFichier = getNomFichier( part );
System.out.println("nom fichier est: "+ nomFichier);
        /*
         * 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" );
            String contentType = request.getServletContext().getMimeType( nomFichier );

            /*
             * Si le fichier est bien une image, alors son en-tête MIME
             * commence par la chaîne "image"
             */
            if ( contentType.startsWith( "application/pdf" ) ) {
                /* Écriture du fichier sur le disque */

                String[] fileNameSplits = nomFichier.split("\\.");
                int extensionIndex = fileNameSplits.length - 1;
                nomFichier = annee+mois + "." + fileNameSplits[extensionIndex];
                System.out.println("fichier est: "+nomFichier);

                ecrireFichier( contenuFichier, nomFichier, chemin );
            } else {
                throw new FormValidationException( "Le fichier envoyé doit être un pdf." );
            }
        }  


    }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
         */
       //e.printStackTrace();
        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 2Mo." );
    }

    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;
}

因此,任何异常(NullPointerException,IllegalStateException,catch(IOException e){ ,ServletException)被处理,这意味着例如当文件为空时,错误消息“ Le vichier ne doit pasêtrevide”不会发送给用户。

0 个答案:

没有答案