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

Servlets/JSP Java Discussion :

Erreur "eu.medsea.mimeutil.MimeException: InputStream must support the mark()"


Sujet :

Servlets/JSP 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 Erreur "eu.medsea.mimeutil.MimeException: InputStream must support the mark()"
    Bonjour

    J'essaie à partir de mon formulaire de récupérer une image et de l'insérer dans ma Base de données Mysql. Tout marche bien sauf que lors de l'insertion de certaines images, j'ai le message suivant:

    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
    févr. 18, 2015 12:53:15 PM org.apache.catalina.core.StandardWrapperValve invoke
    Grave: "Servlet.service()" pour la servlet AjouterPhoto a généré une exception
    eu.medsea.mimeutil.MimeException: InputStream must support the mark() and reset() methods.
        at eu.medsea.mimeutil.MimeUtil2.getMimeTypes(MimeUtil2.java:495)
        at eu.medsea.mimeutil.MimeUtil2.getMimeTypes(MimeUtil2.java:472)
        at eu.medsea.mimeutil.MimeUtil.getMimeTypes(MimeUtil.java:313)
        at forms.AjouterPhotoForm.validationPhoto(AjouterPhotoForm.java:117)
        at forms.AjouterPhotoForm.traiterPhoto(AjouterPhotoForm.java:78)
        at forms.AjouterPhotoForm.creerCandidat(AjouterPhotoForm.java:54)
        at servlets.AjouterPhoto.doPost(AjouterPhoto.java:50)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at filters.PrechargementFilter.doFilter(PrechargementFilter.java:66)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
    Voici par exemple les caractéristiques d'un fichier qui met génère cette erreur:

    Type du fichier: Image JPEG (.JPG)

    Taille: 1,91 Mo (2 006 415 octets)

    Sur disque: 1,91 Mo (2 007 040 octets)

    Pourtant j'ai essayé d'insérer un autre fichier de 5 Mo , et j'ai eu le message qui me dit: Le fichier envoyé ne doit pas dépasser 2Mo.

    Donc je ne comprends pas pourquoi certains fichiers me renvoient des messages d'erreurs.

    Voici mon fichier xml:

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     
    <servlet>
            <servlet-name>Image</servlet-name>
            <servlet-class>servlets.Image</servlet-class>
            <init-param>
                <param-name>chemin</param-name>
                <param-value>/fichiers/images/</param-value>
            </init-param>
        </servlet>
     
    <servlet>
            <servlet-name>AjouterPhoto</servlet-name>
            <servlet-class>servlets.AjouterPhoto</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>
     
    <servlet-mapping>
            <servlet-name>Image</servlet-name>
            <url-pattern>/images/*</url-pattern>
        </servlet-mapping>
     
     <servlet-mapping>
            <servlet-name>AjouterPhoto</servlet-name>
            <url-pattern>/ajouterPhoto</url-pattern>
        </servlet-mapping>
     
    </web-app>
    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est probablement parce que tu n'intercales pas de BufferedInputStream : tous les InputStream ne supportent pas les marks, visiblement nécessaires pour cette méthode qui cause l'exception. Le fait d'intercaler un BufferedInputStream va permettre d'ajouter cette fonctionnalité à n'importe quel InputStream, mais en plus, ça va grandement améliorer les performances de ta servlet, au niveau uploading.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    je remarque que l'erreur vient d'une méthode "getMimeType()" de l'API MimeUtil2 qui, me semble t'il est une API vieillissante.

    Personnellement pour récupérer le MimeType d'un fichier j'utilise getServletContext().getMimeType( nomDuFichier ) qui marche très bien et ne requiert aucune API tierce. De plus, si il te manque des extensions, tu peux les rajouter dans le fichier web.xml de ton application.

    Petit question pour @joel.drigo,
    mais en plus, ça va grandement améliorer les performances de ta servlet, au niveau uploading
    Peux tu expliciter un peu plus ?

    Je croyais que ça n'apportais rien en terme de performance de wrapper un InputStream dans un BufferedInputStream si on ne faisait que lire le stream en entier (car j'imagine que c'est ce qui est fait ici).

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Petit question pour @joel.drigo,

    Peux tu expliciter un peu plus ?

    Je croyais que ça n'apportais rien en terme de performance de wrapper un InputStream dans un BufferedInputStream si on ne faisait que lire le stream en entier (car j'imagine que c'est ce qui est fait ici).
    Ma remarque était plutôt d'ordre généraliste en fait, pour éviter d'entrer dans les détails. Ce n'est pas tant le fait de lire directement un InputStream pour l'écrire directement dans un OutputStream qui rend inutile le BufferedInputStream, mais c'est le fait de le faire octet par octet. En particulier, lors d'écriture dans des fichiers, à cause des accès systèmes. Je parle d'expérience à l'usage plus que de théorie, mais je veux bien qu'on me donne des contre-exemples.

    Un article intéressant sur le sujet ici.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Merci de la précision.

    Un autre lien intéressant ici

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Merci de la précision.

    Un autre lien intéressant ici
    Très intéressant, en effet.
    Manque plus qu'une comparaison par environnement/file système (genre les mêmes graphes, et comparés, pour NTFS).

    Après, je suppose qu'il faut se méfier de comparer des transferts de fichiers avec des transferts de "streams", via un client, via un réseau, un serveur, etc, qui ajoute sa couche. Tojours tenir compte du contexte. Je me souviens d'un cas de transfert de fichier (je ne sais plus quelle taille, mais assez volumineux) de Eclipse RCP à serveur tomcat, via http qui prenait 30 minutes de Macintosh à serveur Windows contre 30 secondes de Windows à serveur Windows, pour le même fichier, cela ça va sans dire. En utilisant un buffer de 4K, 30 minutes pour Mac, contre 12 secondes sur Windows. Bizarre non ? En fait ça venait simplement de la barre de progression (SWT), dont il fallait juste forker le rafraîchissement sur macintosh.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/12/2013, 01h20
  2. Erreur "Must declare the scalar variable "@id"
    Par Devlin111 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 15/03/2012, 12h26
  3. Réponses: 4
    Dernier message: 28/05/2009, 20h11
  4. Réponses: 4
    Dernier message: 23/02/2009, 19h21
  5. Réponses: 1
    Dernier message: 13/02/2007, 12h06

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