Biesterfeld: Java/JSP

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

--
Art.1: Et es wie et es
Art.2: Et kütt wie et kütt
Art.3: Et hätt noch immer jot jejange
Das Kölsche Grundgesetz
  1. Hej,

    jetzt hätte ich mal ganz gerne ein Edit gehabt, hab ich doch glatt einen aussagekräftigen Titel vergessen.

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz
  2. 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?

    --
    水-金-地-火-木-土-天-海-冥
    1. 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

      --
      Art.1: Et es wie et es
      Art.2: Et kütt wie et kütt
      Art.3: Et hätt noch immer jot jejange
      Das Kölsche Grundgesetz
      1. 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

        --
        水-金-地-火-木-土-天-海-冥
        1. 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

          --
          Art.1: Et es wie et es
          Art.2: Et kütt wie et kütt
          Art.3: Et hätt noch immer jot jejange
          Das Kölsche Grundgesetz
        2. 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

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.