Hallo, ich habe einen ganz komischen Fehler: Rufe ich das Servlet auf (GET), wird im Browser ein Formular gezeigt: [h1]Servlet File Upload[/h1> [html][head] [title]fileUpload2[/title] [/head][body] [form action="" method="post" enctype="multipart/form-data"] [input type="file" name="datei" maxlength="100000" accept="*"/][br/][input type="submit" value="submit" ][/form] [/body][/html] Waehle ich eine text- oder html-Datei beim Upload an, funktioniert alles wunderbar. Waehle ich eine Binaerdatei, erscheint auch die Datei-Dialog-Box. Nach dem Bestaetigen mit 'Submit' kommt eine weitere Dialogbox: Openinig file binaer-datei You have chosen to open binaer-datei which is a BIN file from http://localhost:8080 Would you like to save this file? (Danach wird nichts hochgeladen, sondern die ausgesuchte Datei wird lokal noch mal im Download-Ordner gespeichert/kopiert) Browser: Firefox-Englisch Server: Tomcat Was stimmt hier nicht? Irgendwie macht der Browser was falsches. Komischerweise funktioniert der File-Upload bei PHP-CGI-Programmen.
Ich glaube eher das das Servlet keine Binärdatein verarbeiten kann, was geschieht den mit einer "hochgeladenen" Datei normalerweise?
Ich habe heute mehrere Stunden nach dem Problem gesucht. Kaum habe ich den Thread gestartet, bin ich auf eine Loesung gestossen, verstehen tue ich es immer noch nicht. Und zwar lasse ich im Servlet den raw Content anzeigen: Bei der Textdatei sieht das so aus:
1 | getContentLength()=221 |
2 | -----------------------------1055720534112316391269426325 |
3 | Content-Disposition: form-data; name="datei"; filename="1.txt" |
4 | Content-Type: text/plain |
5 | |
6 | 1 |
7 | 2 |
8 | 3 |
9 | |
10 | |
11 | -----------------------------1055720534112316391269426325-- |
1 | BufferedReader bufrd=request.getReader(); |
2 | String s; |
3 | while((s = bufrd.readLine()) != null) { |
4 | out.println(s); |
5 | }
|
6 | bufrd.close(); |
Bei einer Binaerdatei sieht es aehnlich aus, nur dass base64 codiert wird. Aber dann sieht die Seite fuer den Browser so aus, als ob der Browser einen Download angefordert hatte. Somit versucht er die (nicht angeforderte) Datei zu speichern Wenn ich den Servlet-Code abaendere, z.B.
1 | while((s = bufrd.readLine()) != null) { |
2 | //out.println(s); |
3 | i++; |
4 | } |
5 | out.println("i="+i); |
kann man sehr wohl Binaerdateien "hochladen". Die angezeigte Seite hat den Browser "verwirrt". Warum dieser Fehler bei text-Dateien nicht auftritt, kann ich nicht erklaeren. PS: Das ist kein sinnvolles Programm, lediglich Experimentierphase.
Da du deinen Browser nicht genannt hast kann man nur mutmaßen, aber einige IE Versionen haben eine art "Contenterkennung" und dekomprimieren z.B. gz komprimierte Daten beim DL gleich. Da wundert man sich natürlich wenn man dann die .gz Datei entpacken möchte und die Fehlermeldung erhält "dies ist keine gepackte Datei" ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.