2010-07-01 6 views
1

J'ai un mécanisme de téléchargement de fichiers très simple dans java. Je prends juste le fichier et l'enregistre sur le serveur. Je suis en train de tester ce code simple avec du sélénium et quand un timeout survient dans le test de sélénium, tomcat crée des fichiers de 0 octets sous le répertoire tomcat_home/work/Catalina/localhost/uploadServlet/en tant que fichiers MultiPart *. Il crée des milliers de fichiers, jusqu'à ce qu'il n'y ait plus d'espace disque sur l'appareil. Qu'est-ce qui peut causer ce problème? Comment puis-je resoudre ceci? Est-ce que quelqu'un a une idée à ce sujet?Tomcat crée des fichiers de 0 octet

Mon environnement est: Ubuntu - 8,04 serveur, tomcat apache - 5.5.29, Sun Java 1.6

Merci,

Voici l'extrait de code que j'utilise

String strFileName = request.getParameter("FileName"); 
    String strPath = request.getParameter("Path"); 
    File fFile = (File) request.getAttribute("Content"); 

    int index = strPath.length() - 1; 
    if (strPath.charAt(index) != '/') { 
     strPath += "/"; 
    } 
    if (! new File(strPath).exists()) { 
     new File(strPath).mkdirs(); 
    } 
    File file = new File(strPath + strFileName); 
    FileOutputStream fileOutputStream = new FileOutputStream(file); 
    FileInputStream fileInputStream = new FileInputStream(fFile); 

    byte[] bBuf = new byte[1024]; 

    int iBufLen = 0; 
    int iReadLen = 1024; 
    int iTotelLen = 0; 
    /*read 1024 bytes at a time*/ 
    while ((iBufLen = fileInputStream.read(bBuf)) != -1) { 
     fileOutputStream.write(bBuf); 
     fileOutputStream.flush(); 
     iTotelLen += iBufLen; 
     if (fileInputStream.available() < iReadLen) { 
      iReadLen = fileInputStream.available(); 
      break; 
     } 
    } 

    byte[] tempbBuf = new byte[iReadLen]; 
    fileInputStream.read(tempbBuf, 0, iReadLen); 

    fileOutputStream.write(tempbBuf); 

    fileOutputStream.close(); 
    fileInputStream.close(); 

    if (fFile.exists()) { 
     fFile.delete(); 
    } 
+0

Aidez-nous à vous aider en affichant votre code actuel :-) –

+0

Appelez-vous 'flush()' et ou 'close()' sur 'OutputStream' ou' Writer' après avoir écrit le fichier? – Jesper

+0

j'ai édité le poste et inséré le code simple –

Répondre

1

J'ai utilisé la classe apache commons file upload et j'ai supprimé les fichiers temporaires dans la section finally. Le problème est résolu avec cette implémentation.

0

Est-il possible qu'une sorte d'exception se produise au milieu de ce code? Il est préférable de fermer les flux dans un bloc finally.

+0

J'ai essayé celui-ci mais le résultat ne change pas de nombreux 0 octets. –

+0

savez-vous que request.getAttribute ("Content") contient quelque chose avec du contenu? cette partie du code est laissée de côté –

Questions connexes