Java/JSP
Biesterfeld
- https
Hej,
ich setze mich zum ersten mal mit einem Datei-Download auseinander und komm nicht ganz zurecht.
Realisiert werden soll folgendes: In einem Formular soll man auswählen können ob eine große xml-Datei gezipped oder ungezipped heruntergeladen werden soll. Die Information wird per submit serverseitig verarbeitet. Im idealfall soll nun einmal die Datei die serverseitig erzeugt wird ausgeliefert werden und gleichzeitig auf die ursprüngliche Downloadseite redirected werden.
In dem Zusammenhang zwei Fragen:
1.) Wie realisiere ich dass zwei Ressourcen "gleichzeitig" ausgeliefert werden? Also dass einmal die Datei zum Download angeboten wird und gleichzeitig auf die Downloadseite zurückverwiesen wird?
2.) Weiß jemand wie ich in JSPs den Contenttype setzen kann?
response.setContentType( "application/pdf" );
response.sendRedirect( "test.txt" );
Wenn ich die Beispieldatei "test.txt" versende, wird unabhängig welchen Contenttyp ich angebe die Datei immer im Browser angezeigt und nicht zum Download angeboten. Dass die Angabe oben Quatsch ist ist mir schon klar, allerdings dachte ich immer, dass der Contenttype das Verhalten des Browsers steuert und nicht die Dateiendung. Insofern, vermute ich mal dass explizites setzen schlicht ignoriert wird.
Ersetze ich o.a. Code durch
response.setStatus( 302 );
response.setContentType( "application/pdf" );
response.setHeader( "Location", "test.txt" );
beobachte ich übrigens das gleiche Verhalten.
Beste Grüße
Biesterfeld
Hej,
jetzt hätte ich mal ganz gerne ein Edit gehabt, hab ich doch glatt einen aussagekräftigen Titel vergessen.
Beste Grüße
Biesterfeld
Hey,
dass einmal die Datei zum Download angeboten wird und gleichzeitig auf die Downloadseite zurückverwiesen wird?
das geht nicht. Für das sinnvollste halte ich, eine Seite mit zwei Links zu generieren. Der erste stößt den Download an, der zweite kehrt zur Ausgangsseite zurück.
Wenn ich die Beispieldatei "test.txt" versende, wird unabhängig welchen Contenttyp ich angebe die Datei immer im Browser angezeigt und nicht zum Download angeboten.
Bist du hier der automatischen Inhaltserkennung von IE erlegen? Hast du mit geeigneten Werkzeugen überprüft, ob der gesetzte Typ tatsächlich ausgeliefert wurde?
Hej,
dass einmal die Datei zum Download angeboten wird und gleichzeitig auf die Downloadseite zurückverwiesen wird?
das geht nicht. Für das sinnvollste halte ich, eine Seite mit zwei Links zu generieren. Der erste stößt den Download an, der zweite kehrt zur Ausgangsseite zurück.
? Das war ja gerade mein Problem, dass wenn der Download angestoßen wird, die Seite eigentlich gar nicht mehr da ist, weil ja in einer anderen JSP das Formular ausgewertet wird und die herunterzuladende Ressource erst erzeugt wird.
Inzwischen hab ich mich aber etwas in die Servlets als Obermenge der JSPs eingearbeitet. Das Problem war, dass eine JSP sich zwingend in den Ausgabestrom versucht zu schreiben, selbst wenn die Ressource keinen Inhalt hat. Bei einem Servlet wird nur geschrieben, was ich vorgebe und wenn ich in den OutputStream nur den downzuloadenden InputStream schreibe, wird die aktuelle Downloadseite gar nicht erneuert.
Allerdings bleibt noch ein kleiner Makel. Weißt Du vielleicht, wie ich den Dateinamen der zum download angebotenen Resource beinflussen kann? Momentan nimmt diese automatisch den Inhalt des action-Attributes an. Ein HTTPServletResponde.setHeader( "Location", "XXX" ); hat zumindest keinen offensichtlichen Einfluss.
Wenn ich die Beispieldatei "test.txt" versende, wird unabhängig welchen Contenttyp ich angebe die Datei immer im Browser angezeigt und nicht zum Download angeboten.
Bist du hier der automatischen Inhaltserkennung von IE erlegen?
Nein!
Hast du mit geeigneten Werkzeugen überprüft, ob der gesetzte Typ tatsächlich ausgeliefert wurde?
Das ist ein guter Tip, könntest du mir vielleicht einsolches Tool (zwingend unter Linux) nennen?
Beste Grüße
Biesterfeld
wie ich den Dateinamen der zum download angebotenen Resource beinflussen kann?
Suchwort Content-Disposition hier im Archiv.
ob der gesetzte Typ tatsächlich ausgeliefert wurde?
könntest du mir vielleicht einsolches Tool (zwingend unter Linux) nennen?
http://forum.de.selfhtml.org/archiv/2006/10/t137986/#m897626
Hej,
wie ich den Dateinamen der zum download angebotenen Resource beinflussen kann?
Suchwort Content-Disposition hier im Archiv.
Super vielen Dank,
HTTPServletResponse.setHeader( "Content-Disposition", "attachment; filename="+id+".zip" )
Tut genau was ich will.
ob der gesetzte Typ tatsächlich ausgeliefert wurde?
könntest du mir vielleicht einsolches Tool (zwingend unter Linux) nennen?
http://forum.de.selfhtml.org/archiv/2006/10/t137986/#m897626
Schau ich mir an. Danke.
Beste Grüße
Biesterfeld
Hi,
ob der gesetzte Typ tatsächlich ausgeliefert wurde?
könntest du mir vielleicht einsolches Tool (zwingend unter Linux) nennen?
http://forum.de.selfhtml.org/archiv/2006/10/t137986/#m897626
Wireshark halte ich für übertrieben. Firefox + LiveHTTPHeaders reicht vollkommen.
cu,
Andreas