Java-Servlet: Probleme beim File-Upload

Gast #1955413
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.
Gast
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.
Persönliche Seite
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" ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.