# Generierte Datei an Browser senden



## Matty2 (3. Sep 2008)

Hallo Leute,

wie schaffe ich es nach dem Serverseitigem-Generieren einer Datei (bspw. einer Text-Datei die ich mit Werten aus einem HTML-Formular fülle) diese an den Browser per Klick zu senden?

Mit einem Klick auf "generieren" soll also die Text-Datei generierte werden, irgendwo temporär auf dem Server gespeichert werden (das bekomm ich hin) und anschließend direkt an den Nutzer als "Download" geschickt werden. Dass das Download-Fenster crossbrowser aufplobbt.

Wie bekomme ich das hin? Finde dazu nirgends etwas... vielleicht verwende ich aber auch die falschen Suchbegriffe.

Danke für jegliche Hilfe


----------



## maki (3. Sep 2008)

Google mal nach "Stream Servlet".


----------



## SlaterB (3. Sep 2008)

ein Server schickt NIE selbstständig irgendwas an einen Client, schon gar nicht im Web mit Browser & Co.

der Client muss nach einer gewissen Zeit erneut anfragen,
im Web kann das mit Technologien wie AJAX/ JavaScript auch ohne User-Eingabe passieren

---------

zu makis Antwort:
meine zählt nur, falls du nicht den Normalfall 'Anfrage -> Textdatei als Antwort' meinst


----------



## Matty2 (3. Sep 2008)

maki: Danke,dass schau ich mir mal an.

SlaterB: Ja der Klick auf "generieren" löst schon einen Ajax-Request aus. Kann ich da nicht irgendwie als Response die Datei zurückgeben und den Browser ein Download-Fenster prompten lassen?


----------



## SlaterB (3. Sep 2008)

ich kann dazu keine Details nennen und dich nebenbei darauf hinweisen, dass das eine gute Frage für ein JavaScript/ Ajax-Forum wäre,
das Problem ist bestimmt unabhängig davon ob der Server in Java geschrieben ist oder in PHP


----------



## Matty2 (3. Sep 2008)

Es geht mir ja auch nicht um die Client sondern um die Server-Seite. Vor allem wie ich dem Browser vormachen kann das er auf einen "Direkt-Downloadlink" geklickt hat... aber ich glaub das "Stream Servlet" geht schon in diese Richtung:
http://www.devx.com/getHelpOn/Article/11698/1954


----------



## Matty2 (3. Sep 2008)

Also das geht jetzt mit diesem Streaming Servlet... (übrigens muss ich ein generiertes RTF "verschicken".

Im FireFox klappt das auch mit dem MIME "application/rtf". Da kann ich sogar auf "öffnen" klicken und Word geht direkt auf... im  IE geht das Download-Prompt zwar auch auf, nur er erkennt nicht welche Datei das ist und ich kann sie nur als "dateiname" speichern (es wird nicht die Dateiendung ".rtf" vorgeschlagen wie im FF) ... 

Jemand ne Idee warum das so ist?

Danke


----------



## maki (3. Sep 2008)

In dem Beispiel fehlt

```
response.setHeader("Content-Disposition", "attachment;filename=\"" +"derEigentlicheDateiname"+ "\"");
```
kommt gleich nachdem die Header gesetzt wurden.

Ansonsten nutze ich das hier:

```
private String getContentType(java.io.File file) {
		String contentType = null;

		MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();

		contentType = mimeTypesMap.getContentType(file);

		return contentType;
	}
```
um, den Contenttype zu ermitteln, MimetypesFileTypeMap gehört zum java activation framework.


----------



## Matty2 (3. Sep 2008)

Habs gelöst, dass hier schafft Abhilfe:

```
StringBuilder type = new StringBuilder("attachment; filename=test.rtf");
  		response.setContentType("application/octet-stream");
 		response.setHeader("Content-Disposition", type.toString());
```

Dadurch kann ich sogar den vorgeschlagenen Dateinamen festlegen *froi*
Und es funzt im FF / IE / Chrome


----------

