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