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 :

[JSP] Problème d'upload de fichiers


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Points : 12
    Points
    12
    Par défaut [JSP] Problème d'upload de fichiers
    Bonjour a tous,

    Je suis en train de realiser un upload de fichiers mais j'ai un pb lorsque j'envoie des documents du type word, excel, etc...
    Pour resumer, j'ai un formulaire html avec une balise de type file, en cliquant sur le submit, le fichier est envoye sur mon serveur et je l'y sauvegarde. Cela fonctionne bien pour les fichiers de type txt et rtf, cela fonctionne moins bien avec les csv (perte de mise en page : si on a deux colonnes dans le fichier xls, apres l'upload on n'a plus qu'une colonne avec valeurcol1;valeurcol2) mais ca ne marche pas du tout avec les fichiers word puisque je recois un fenetre d'erreur lors de l'ouverture du document (le chemin n'existe pas, je pencherais plutot pour une mauvaise formation du document).

    Quelqu'un pourrait-il me proposer une solution pour remedier a ca ?

    J'utilise ce bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
     
    public class FileUploadBean {
     
      private String savePath, filepath, filename, contentType, datacontent, datatitle;
      private Dictionary fields;
     
      public String getFilename() {
        return filename;
      }
     
      public String getFilepath() {
        return filepath;
      }
     
      public void setSavePath(String savePath) {
        this.savePath = savePath;
      }
     
      public String getContentType() {
        return contentType;
      }
     
      public String getFieldValue(String fieldName) {
        if (fields == null || fieldName == null)
          return null;
        return (String) fields.get(fieldName);
      }
     
      private void setFilename(String s) {
        if (s==null)
          return;
     
        int pos = s.indexOf("filename=\"");
        if (pos != -1) {
          filepath = s.substring(pos+10, s.length()-1);
          pos = filepath.lastIndexOf("\\");
          if (pos != -1)
            filename = filepath.substring(pos + 1);
          else
            filename = filepath;
        }
      }
     
      private void setContentType(String s) {
        if (s==null)
          return;
     
        int pos = s.indexOf(": ");
        if (pos != -1)
          contentType = s.substring(pos+2, s.length());
      }
     
      public String getDatacontent(){
        return datacontent;
      }
     
      private void setDatacontent(String content){
        this.datacontent = this.datacontent + content;
      }
     
      public String getDataTitle(){
        return datatitle;
      }
     
      private void setDataTitle(String title){
        this.datatitle = this.datatitle + title;
      }
     
      public void doUpload(HttpServletRequest request) throws IOException {
        ServletInputStream in = request.getInputStream();
     
        byte[] line = new byte[128];
        int i = in.readLine(line, 0, 128);
        if (i < 3)
          return;
        int boundaryLength = i - 2;
     
        String boundary = new String(line, 0, boundaryLength); //-2 discards the newline character
        fields = new Hashtable();
     
        while (i != -1) {
          String newLine = new String(line, 0, i);
          if (newLine.startsWith("Content-Disposition: form-data; name=\"file_path\"")) {
            setDatacontent(newLine);
            if (newLine.indexOf("filename=\"") != -1) {
              setFilename(new String(line, 0, i-2));
              if (filename==null)
                return;
              //this is the file content
              i = in.readLine(line, 0, 128);
              setDatacontent(new String(line, 0, i));
              setContentType(new String(line, 0, i-2));
              i = in.readLine(line, 0, 128);
              // blank line
              setDatacontent(new String(line, 0, i));
              i = in.readLine(line, 0, 128);
              setDatacontent(new String(line, 0, i));
              newLine = new String(line, 0, i);
              setSavePath("C:\\");
              PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter((savePath==null? "" : savePath) + filename)));
              while (i != -1 && !newLine.startsWith(boundary)) {
                // the problem is the last line of the file content
                // contains the new line character.
                // So, we need to check if the current line is
                // the last line.
                i = in.readLine(line, 0, 128);
                setDatacontent(new String(line, 0, i));
                if ((i==boundaryLength+2 || i==boundaryLength+4) // + 4 is eof
                  && (new String(line, 0, i).startsWith(boundary)))
                  pw.print(newLine.substring(0, newLine.length()-2));
                else
                  pw.print(newLine);
                newLine = new String(line, 0, i);
                //System.out.println(newLine);
     
              }
              pw.close();
              }
            }
            else {
              //this is a field
              // get the field name
              int pos = newLine.indexOf("name=\"");
              String fieldName = newLine.substring(pos+6, newLine.length()-3);
              //System.out.println("fieldName:" + fieldName);
              // blank line
              i = in.readLine(line, 0, 128);
              i = in.readLine(line, 0, 128);
              newLine = new String(line, 0, i);
              StringBuffer fieldValue = new StringBuffer(128);
              while (i != -1 && !newLine.startsWith(boundary)) {
                // The last line of the field
                // contains the new line character.
                // So, we need to check if the current line is
                // the last line.
                i = in.readLine(line, 0, 128);
                if ((i==boundaryLength+2 || i==boundaryLength+4) // + 4 is eof
                  && (new String(line, 0, i).startsWith(boundary)))
                  fieldValue.append(newLine.substring(0, newLine.length()-2));
                else
                  fieldValue.append(newLine);
                newLine = new String(line, 0, i);
              }
              setDataTitle(fieldValue.toString());
              //System.out.println("fieldValue:" + fieldValue.toString());
              fields.put(fieldName, fieldValue.toString());
            }
     
          i = in.readLine(line, 0, 128);
     
        } // end while
      }
    }
    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    Tu peux essayer avec ce bean, avec lequel je n'ai pas eu de problème de format de fichier jusqu'à présent. T'auras peut être plus de chance. Et n'oublies pas de mettre dans ta balise form l'option :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enctype="multipart/form-data"

    lien vers le bean d'upload :
    http://www.javazoom.net/jzservlets/u...ploadbean.html

    @+

    ToCToF

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    merci bien, je suis en train d'essayer ca.

    j'ai quand meme un pb, quand je fais la declaration du bean dans ma jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%@ page import="javazoom.upload.*" %>
     
    <jsp:useBean id="upBean" scope="page" class="javazoom.upload.UploadBean" >
                       <jsp:setProperty name="upBean" property="folderstore" value="c:/rep" />
                       <jsp:setProperty name="upBean" property="parser" value="<%= MultipartFormDataRequest.CFUPARSER %>"/>
                       <jsp:setProperty name="upBean" property="parsertmpdir" value="c:/rep"/>
                       <jsp:setProperty name="upBean" property="overwritepolicy" value="nametimestamp" />
          </jsp:useBean>
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     The value for the useBean class attribute javazoom.upload.UploadBean is invalid.
    alors que uploadbean.jar est bien sous le rep lib de mon appli.

    Quelqu'un a une idee ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    Je pense que l'erreur peut provenir de la manière dont tu as appelé le répertoire dans les propriétés de ton bean (ne dois pas être compris par windows). As-tu essayé avec :

    <jsp:setProperty name="upBean" property="folderstore" value="c:\rep" />

    et

    <jsp:setProperty name="upBean" property="parsertmpdir" value="c:\rep"/>

    ou peut-être avec quelquechose du genre c:\\rep...

    Bonne chance

    ToCToF

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    voila ca fonctionne nickel, j'ai modifie le chemin du repertoire avec des \\, j'avais aussi des problemes d'acces aux class, je n'ai plus de pbs avec les formats docs etc.

    j'adore deja ce bean ^_^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSP] Upload de fichier capricieux
    Par enguerran dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 19/06/2006, 10h05
  2. Upload de fichier avec jsp
    Par fx2024 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/06/2006, 18h02
  3. [Servlet & JSP]Upload de fichier
    Par Gob4 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 31/05/2006, 11h53
  4. [JSP - FileUpload] - uploader un fichier
    Par karibouxe dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 30/05/2006, 15h00
  5. Réponses: 3
    Dernier message: 09/05/2006, 00h31

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