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

Entrée/Sortie Java Discussion :

[Performance] Upload File : java out of memory


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut [Performance] Upload File : java out of memory
    Bonjour à tous

    je sais que le probleme a été posé maintes fois mais là j'avoues que je ne sais pas trop d'où vient le probleme

    Je fais une petit formulaire qui permet d'uploader un fichier de type mp3 donc avec potentiellement des tailles assez grande J'utilise struts et les classes mises à disposition pour l'upload du fichier

    Là où ça fait mal est bien sur les perfs ...
    j'utilise jmeter et j'appelle mon action avec un certain nombre de threads simultanés

    à partir de 25 appels simulatanés mon appli plante avec la stack trace suivante :

    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
     
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:310)
    	at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:233)
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1209)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    	at java.lang.Thread.run(Thread.java:595)
    05/06/08 15:14:13.593 |ERROR | [http-8080-Processor2] [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/goomWeb].[action]:253]  - "Servlet.service()" pour la servlet action a généré une exception
    java.net.SocketException: Connection reset
    	at java.net.SocketInputStream.read(SocketInputStream.java:168)
    	at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    	at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    	at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    	at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    	at org.apache.coyote.Request.doRead(Request.java:419)
    	at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    	at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    	at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    	at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
    	at java.io.InputStream.read(InputStream.java:89)
    	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
    	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
    	at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:593)
    	at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:619)
    	at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:638)
    	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:961)
    	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:942)
    	at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:310)
    	at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:233)
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1209)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at o
    voici mon code où :

    -myFile est un objet de type FormFile passé en paramétre de la méthode invoquée

    -

    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
     
    	byte[] fileData = new byte[2048];
            FileInputStream fileInputStream = null;
            FileOutputStream fileOutputStream = null;
    	BufferedInputStream bufferedInputStream = null;
    	BufferedOutputStream bufferedOutStream = null;
    	int nbRead = 0;
    ....
     
                  try {
    			fileData = myFile.getFileData();
    		} catch (FileNotFoundException e) {
    			log.error("FileUtil getSaveFileOnDisk : ", e);
    			return false;
    		} catch (IOException e) {
    			log.error("FileUtil getSaveFileOnDisk : ", e);
    			return false;
    		}
     
     
    ....
     
     
                 File fileToCreate = new File(filePath, myFile.getFileName());
     
    ....
                 try {
    		fileInputStream = (FileInputStream) myFile
    								.getInputStream();
    	  } 
                catch (IOException e) {
               //TRAITEMENT
    	  }
                bufferedInputStream = new BufferedInputStream(
    							fileInputStream, 10 * 1024);
     
            try {
    	fileOutputStream = new FileOutputStream(fileToCreate);
    	}
            catch (FileNotFoundException e) {
    		 //TRAITEMENT
    	}
           try {
    	    bufferedOutStream = new BufferedOutputStream(
    								fileOutputStream);
     
    	     while ((nbRead = bufferedInputStream.read(fileData)) > 0) {
    	           bufferedOutStream.write(fileData, 0, nbRead);
    	           bufferedOutStream.flush();
    	      }
    	} 
           catch (FileNotFoundException e) {		
    					} 
           catch (IOException ioexception1) {
     
    	}
    ...
    }
    catch(){
    //TRAITEMENT
    }
     
    finally{
    //TRAITEMENT de fermeture des streams
    }

    je sais pas si c'est tres clair mais j'ai repris pas mal d'exemple
    et là j'avoue que je ne sais pas comment faire ...


    J'ai l'impression que le probleme vient du inputstream
    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    C'est pour le moins incompréhensible. Déjà,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] fileData = new byte[2048];
    me semble inutile. Après je ne sais pas trop ce que tu fais mais ça me semble inutile aussi. Je te conseils de lire le tutorial de commons fileupload : http://commons.apache.org/fileupload/using.html

  3. #3
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    En fait j'ai lu cette doc et mon probleme est que je ne sais pas quoi mettre dans la partie du code du paragraphe Processing the uploaded items pour que l'on ai de bonne perfs

    mon objectif est d'ecrire les fichiers uploader sur un le serveur

  4. #4
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Tu as déjà utilisé cette API ?

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Difficile de t'aider :
    • On ne fait pas ce que doit faire ton code, surtout qu'il n'est pas commenté.
    • Ton code est incomplet et illisible (mal indenté en particulier)
    • Il y a des try/catch partout et vide (!?) qui me font penser à une très mauvaise gestion des erreurs.



    a++

  6. #6
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Salut

    bon désolé je vais essayer d'indenter mon code et d'être plus clair

    en fait mon objectif est d'écrire sur le disque le fichier uploader
    ensuite j'utilise l'objet FormFile de struts qui permet de recuperer le fichier uploader

    je me suis basé sur l'article suivant pour le upload en utilisant struts :
    http://www.roseindia.net/struts/strutsfileupload.shtml

    pour l'écriture je voulais pour une question de performance utiliser les buffer de stream
    En fait le code que j'ai récupéré marche pour plusieurs itérations: c'est à dire que je simule plusieurs upload de fichier et ce de manière simultanées grâce à jmeter.

    Mon problème est que à partir d'un certain nombre d'itération mon appli plante avec un beau out of memory


    Mon action qui est appelée par le submit du formulaire fait appel à une méthode qui va ecrire sur le disque
    cette méthode reçoit en paramètre l'objet FormFile myFile
    Voici les différentes étapes de cette méthode

    1 ere etape :

    je récupère le contenu du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
       fileData = myFile.getFileData();
    }
    catch (FileNotFoundException e) {
       log.error("FileUtil getSaveFileOnDisk : ", e);
    }
    catch (IOException e) {
       log.error("FileUtil getSaveFileOnDisk : ", e);
    }
    2 eme etape : je cree l'objet File avec un filepath récupéré dans un fichier de properties et le nom du fiichier obtenu avec l'obet FileForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File fileToCreate = new File(filePath, myFile.getFileName());

    3 eme etape

    je cree les streams et j'ecris sur le disque:

    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
     
    FileInputStream fileInputStream = null;
    FileOutputStream fileOutputStream = null;
    BufferedInputStream bufferedInputStream = null;
    BufferedOutputStream bufferedOutStream = null;
    int nbRead = 0;
     
    try {
       fileInputStream = (FileInputStream) myFile.getInputStream();
    } 
    catch (IOException e) {
       log.error("FileUtil getSaveFileOnDisk : ", e);
    }
     
    bufferedInputStream = new BufferedInputStream(fileInputStream, 10 * 1024);
     
    try {
      fileOutputStream = new FileOutputStream(fileToCreate);
    }
    catch (FileNotFoundException e) {
     log.error("FileUtil getSaveFileOnDisk : ", e);
    }
     
    try {
    bufferedOutStream = new BufferedOutputStream(fileOutputStream);
     
       while ((nbRead = bufferedInputStream.read(fileData)) > 0) {
          bufferedOutStream.write(fileData, 0, nbRead);
         bufferedOutStream.flush();
       }
     
    }
    catch (FileNotFoundException e) {
       log.error("FileUtil getSaveFileOnDisk : ", e);
    } 
    catch (IOException ioexception1) {
       log.error("FileUtil  getSaveFileOnDisk :  ",ioexception1);
    }
     
     
     
    finally {
       try {
    	fileInputStream.close();
    	fileOutputStream.close();
    	bufferedInputStream.close();
    	bufferedOutStream.close();
    	}
     catch (IOException e1) {
        log.error("FileUtil getSaveFileOnDisk : ", e1);
      }
     
    }

    l'exception générée est celle postée dans le premier message
    voilà tout
    j'espère que c'est un peu plus clair ....
    mon but est donc d'obtenir qque chose de plus robuste

    merci d'avance

  7. #7
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Comme je l'ai dit. Ce que tu fais est inutile. Commons fileupload te permet d'écrire le fichier où tu veux. Regarder du côté de DiskFactory de tête.

  8. #8
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    c'est ce que j'ai fais sauf que lorsque je parcours la boucle des items qui sont des instances de la classe FileItem je n'obtiens rien du tout

    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
     
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    log.debug("isMultipart : " + isMultipart);
     
    // Create a factory for disk-based file items
    FileItemFactory factory = new DiskFileItemFactory();
     
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
     
    // Parse the request
    try {
      items = upload.parseRequest(request);
    }
     catch (FileUploadException e) {
      log.error("FILEUPLOADEXCEPION", e);
    }
    Iterator iter = items.iterator();
      while (iter.hasNext()) {
    	  log.debug("FileUtil -getSaveFileOnDisk-  [STEP 1]");
    	...
       }
    la trace "isMultipart" affiche true
    mais je ne rentre pas dans la boucle while ....

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par isma4 Voir le message
    1 ere etape :

    je récupère le contenu du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
       fileData = myFile.getFileData();
    }
    catch (FileNotFoundException e) {
       log.error("FileUtil getSaveFileOnDisk : ", e);
    }
    catch (IOException e) {
       log.error("FileUtil getSaveFileOnDisk : ", e);
    }
    Déjà tu utilises getFileData() qui te charges la totalité du fichier en mémoire. C'est pas top justement sur un serveur qui pourra traiter plusieurs fichiers en même temps...

    Surtout qu'après justement tu utilises l'InputStream pour lire le fichier : c'est l'un ou l'autre mais pas les deux !



    Seconde erreur, mais qui est commune à tout ton code : tu as une multitude de try/catch.
    Grosso modo tu te fiches des erreurs que tu peux rencontrer :
    • Tu n'arrives pas à lire les données c'est pas grave on va quand même les écrires
    • tu n'arrives pas à ouvrir le fichier c'est pas grave on écrira quand même dedans


    Les try/catch ne sont pas là pour faire beau. Ils doivent englober le traitement qui pose problème. Ici tout est lié et si tu n'arrives pas à faire un traitement, alors cela doit arrêter tout !



    Citation Envoyé par isma4 Voir le message
    3 eme etape

    je cree les streams et j'ecris sur le disque:
    Ton buffer fileData fait la taille du fichier (voir plus haut), et est donc assez consommateur en mémoire.
    Enfin ton try/finally est incorrect car il traites plusieurs flux : si une erreur survient sur l'un deux les suivants ne seront pas fermé

    Il faut utiliser un try/finally par flux.


    Au passage si tu utilises toi-même un buffer, c'est inutile de passé par des flux déjà bufférisé...




    Je n'ai jamais utilisé les FormFile mais mon code ressemblerait à 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
    	public static void saveToDirectory(File filePath, FormFile myFile) throws IOException {
     
    		// On crée l'objet file représentant le fichier cible :
    		File fileToCreate = new File(filePath, myFile.getFileName());
     
    		// On ouvre ce fichier en écriture
    		// Qu'on faire suivre par un try/finally pour fermer le flux dans tous les cas
    		OutputStream out = new FileOutputStream(fileToCreate);
    		try {
     
    			// On récupère le flux vers le FormFile
    			InputStream in = myFile.getInputStream();
    			try {
     
    				// On va utiliser un buffer de copie de 8192 octets :
    				byte[] buf = new byte[8192];
    				int len;
     
    				// Et on faie une copie de 'in' vers 'out' par bloc :
    				while ( (len=in.read(buf)) >=0 ) {
    					out.write(buf, 0, len);
    				}
     
    			} finally {
    				in.close();
    			}
     
    		} finally {
    			out.close();
    		}
     
    	}
    Tu remarqueras que je ne traites pas les exceptions : je les laisse tout simplement remonté à la méthode appelante pour l'avertir du problème.
    Mais si j'aurais eu à les traiter j'aurais utiliser un seul try/catch qui engloberait toute la méthode...


    a++

  10. #10
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    J'ai compris mon erreur de chargement du filedata d'une traite ...effectivement c'est un peu trop

    En fait je traites les exceptions mais j'ai simplement mis des traces sans traitement pour ne pas alourdir

    sinon j'ai repris une partie de ton code mais j'ai toujours la même exception


    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
     
    05/06/08 18:09:47.062 |ERROR | [http-8080-Processor38] [org.apache.struts.upload.CommonsMultipartRequestHandler:241]  - Failed to parse multipart request
    org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Connection reset
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:310)
    	at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:233)
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1209)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    	at java.lang.Thread.run(Thread.java:595)
    Caused by: java.net.SocketException: Connection reset
    	at java.net.SocketInputStream.read(SocketInputStream.java:168)
    	at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    	at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    	at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    	at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    	at org.apache.coyote.Request.doRead(Request.java:419)
    	at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    	at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    	at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    	at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
    	at java.io.InputStream.read(InputStream.java:89)
    	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
    	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:362)
    	... 23 more

  11. #11
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Tu peux me donner le code de ta page JSP ?

  12. #12
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Je te mettrais le code de la JSP mais dans mon cas j'utilise JMETER pour simuler des requets HTTP qui appelle mon action struts

    sinon j'ai encore une question : est ce que les classes Buffered...STream permettent d'optimiser le temps d'ecriture ?

  13. #13
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Voici le code de ma 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
     
    <%@ page language="java" pageEncoding="ISO-8859-1"%>
     
    <%@include file="common/baseImport.jsp"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html:html locale="true">
      <head>
        <html:base />
     
     
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
     
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
     
      </head>
     
      <body>
        <html:form action="/uploadUgcProcess" method="post"  enctype="multipart/form-data">
          <table border="0">
            <tr>
    		  <td align="center" colspan="2">SELECTIONNER LE CONTENU</td>
            </tr>
    		<!-- Geston des erreurs -->
    		<tr>
    		   <td align="left" colspan="2"><font color="red"><html:errors bundle="messages"/></font></td> 
    		</tr>
    		<tr>     
    			<td align="left" colspan="2"><html:file  property="theFile"/></td>
    		</tr>
    		<tr>
    			<td align="center" colspan="2"><html:submit>Valider</html:submit></td>
    		</tr>
          </table>
        </html:form>
      </body>
    </html:html>
    sinon pour la méthode de inputstream j'ai en fait un nouveau problème c'est que le fichier copié vaut 0 Ko ..

    merci encore à vous deux pour votre aide

  14. #14
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    En fait en utilisant l'api dont tu m' a parlé à chaque fois l'iterator qui est sensé contenir l'instance FileItem est vide

    il est dit dans la FAQ:

    Why is parseRequest() returning no items?
    This most commonly happens when the request has already been parsed, or processed in some other way. Since the input stream has aleady been consumed by that earlier process, it is no longer available for parsing by Commons FileUpload.
    le probleme est que je ne vois pas comment la requete aurait pu etre parséee..

    voici mon code
    Je ne sais pas si ça avoir avec struts


    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
     
    public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception, IOException {
     
      LOGGER.info("UploadContenuProcessAction [BEGIN]");
      ActionErrors errors = new ActionErrors();
     
      FormFile myFile = ((UgcForm) form).getTheFile();
      if (!preprocess(myFile)) {
    	ActionError errorMessage = new ActionError("error.formatcontenu","","");
    	errors.add(ActionErrors.GLOBAL_MESSAGE, errorMessage);
      }
     
     
      if (!errors.isEmpty()) {
        saveErrors(request, errors);
        return mapping.findForward("uploadpreprocess.error");
     }
     
     // Check that we have a file upload request
     boolean isMultipart = ServletFileUpload.isMultipartContent(request);
     LOGGER.debug("FileUtil getSaveFileOnDisk [isMultipart]: "+ isMultipart);
     
     DiskFileItemFactory factory = new DiskFileItemFactory();
     // Create a new file upload handler
     ServletFileUpload upload = new ServletFileUpload(factory);
     LOGGER.debug("FileUtil getSaveFileOnDisk [STEP 0]: ");
     // Parse the request
     List  items = upload.parseRequest(request);
     LOGGER.debug("FileUtil getSaveFileOnDisk [STEP1]: ");
     // Process the uploaded items
     Iterator iter = items.iterator();
     LOGGER.debug("FileUtil getSaveFileOnDisk [STEP 2]: ");
     LOGGER.debug("FileUtil getSaveFileOnDisk [ITERATOR ISEMPTY]: "+items.isEmpty());
     while (iter.hasNext()) {
      LOGGER.debug("FileUtil getSaveFileOnDisk [ITERATOR]: ");
    }
    ....
    }
    Les traces me disent que isMultipart vaut true et que l'iterator est vide

  15. #15
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par isma4 Voir le message
    En fait je traites les exceptions mais j'ai simplement mis des traces sans traitement pour ne pas alourdir
    Heu... Je ne critiquais pas le fait que les catchs contiennent "//TRAITEMENT", mais la multitude de catch de ton code...


    Citation Envoyé par isma4 Voir le message
    sinon j'ai repris une partie de ton code mais j'ai toujours la même exception
    Je ne vois pas d'OutOfMemory ici

    De plus je ne voit rien dans le stacktrace qui ne correspondent à ton code... mais un "Connection reset" qui me ferait penser à un problème réseau

    a++




    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
     
    05/06/08 18:09:47.062 |ERROR | [http-8080-Processor38] [org.apache.struts.upload.CommonsMultipartRequestHandler:241]  - Failed to parse multipart request
    org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Connection reset
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:310)
    	at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:233)
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1209)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    	at java.lang.Thread.run(Thread.java:595)
    Caused by: java.net.SocketException: Connection reset
    	at java.net.SocketInputStream.read(SocketInputStream.java:168)
    	at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    	at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    	at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    	at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    	at org.apache.coyote.Request.doRead(Request.java:419)
    	at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    	at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    	at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    	at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
    	at java.io.InputStream.read(InputStream.java:89)
    	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
    	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
    	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:362)
    	... 23 more
    [/QUOTE]

  16. #16
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    ah zut désolé
    je vois que mon probleme est déjà referencé dans la FAQ
    je vais continuer à chercher

  17. #17
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bon j'ai utilisé l'api dont tu me parles mais j'ai toujours la même trace

    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:113)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
    at org.apache.coyote.Request.doRead(Request.java:419)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:924)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.close(MultipartStream.java:904)
    at com.goom.servlet.UploadContenuServlet.doPost(UploadContenuServlet.java:136)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    est ce que ce n'est pas une config de tomcat (tous mes tests sont en local) ?

    et je reviens avec une autre question : est ce que le buffer stream permet d'ameliorer les perfs ?

    merci encore

  18. #18
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Ton problème est simple. Tu utilises deux choses concurrentes pour traiter l'upload. Soit tu utilises Struts, soit tu utilises commons fileupload.

    Si tu utilises Struts, ton bean doit être du type org.apache.struts.upload.FormFile.

    Si tu veux utiliser commons fileupload. Vire tout les tags de struts. Et mets uniquement dans le formulaire <form ... action="/strutsAction.do"></form> et tu pourras parser ta requête dans ton controller Struts.

    Le stream buffer améliore grandement les performances. Si tu veux faire mieux, il faut utiliser les FileChannel. Tout cela est inutile si tu utilises les API au dessus.

    Je pense que Struts utilise commons fileupload pour parser les requêtes multipart.

  19. #19
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    En fait finallement j'ai utilisé l'API commons
    ceci dit j'envois avec JMETER plus de 30 requetes simultanées avec un fichier mp3 de 4Mo j'ai l"exception que j'ai mis dans mon dernier POST

    je trouve que ce n'est pas terrible comme perf .. non ?

  20. #20
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Quand tu dis que tu as utilisé l'API commons upload, est-ce que tu as viré la gestion du formulaire par Struts ? Est-ce que tu as respecté le tutorial ? Car de base Fileupload sauvegarde les fichiers sur le disque donc pas la peine de faire l'opération deux fois...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. BME-01702 : Java has run out of memory
    Par grosecret dans le forum JDeveloper
    Réponses: 4
    Dernier message: 28/09/2009, 16h00
  2. Réponses: 1
    Dernier message: 14/06/2009, 00h10
  3. erreur Out of memory Error+ java(jb9 sous linux)
    Par Scal-tn dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 23/04/2008, 10h27
  4. out of memory java heap space : 2048M pas suffisant?
    Par waflyx dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 21/12/2007, 19h58
  5. [JAVA / Out Of Memory] Aide pour optimiser du code
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 7
    Dernier message: 06/02/2007, 09h58

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