# Dateidownload fehlerhaft



## thommy.s (29. Aug 2009)

Hallihallo,

ich möchte von einem Tomcat-Server Excel-Dateien zum Download anbieten. So weit, so gut. Download klappt auch. Die heruntergeladenen Excel-Dateien sind aber leider fehlerhaft angekommen. Meldung von Excel: "Format der Datei konnte nicht erkannt werden".

Hier der Code:


```
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		HttpSession session = request.getSession(false);
		
		String filename = (String)session.getAttribute("filename");
		
		File file = new File("Sheets/" + filename);
		InputStream in = new FileInputStream(file);
		
		byte filearray[] = new byte[in.available()];
		in.read();
						
		
		response.addHeader("Cache-Control", "max-age=0");
		response.addHeader("Content-Disposition", "attachment; filename="+ filename);
		response.addHeader("Pragma", "public");
		response.setContentType("application/msexcel");
		ServletOutputStream out = response.getOutputStream();
		
		out.write(filearray);
		out.flush();
		out.close();
		in.close();
	}
```

Mir fällt im Moment kein Grund ein, warum die Übertragung fehlerhaft ist. Die Excel-Dateien im Dateisystem des Servers sind i.O.

Würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte.

Ciao Thomas


----------



## thommy.s (29. Aug 2009)

hat keiner eine Idee, oder ist ihm sowas nicht schon mal untergekommen...?


----------



## musiKk (29. Aug 2009)

Laut Wikipedia ist der Content-Type einer Excel-Datei [c]application/vnd.ms-excel[/c]. Ansonsten solltest Du vielleicht mal schauen (mit einem HEX Editor oder so), inwiefern sich die Dateien unterscheiden.


----------



## Rydl (29. Aug 2009)

an welcher stelle im code schreibst du denn die bytes in dein "byte filearray[]"?

ich glaub der content type ist beim download auch irrelevant, im gegensatz zum upload , oder?


----------



## thommy.s (29. Aug 2009)

@musiKk

Vielen Dank für den Tipp mit dem Hexeditor. Da steht nämlich drin, dass nichts drin steht (Alles '00')

@Rydl

ich instanziiere das Array in Zeile 12 und lese es in Zeile 13 ein:


```
byte filearray[] = new byte[in.available()];

 in.read();
```

Du hast recht, da steht gar kein Argument, wohin er dies lesen soll.

Richtig ist also:


```
byte filearray[] = new byte[in.available()];

 in.read(filearray);
```



Danke euch beiden, dass ihr mein Brett vom Kopf gerissen habt. Et funzt nu.

Schönes Wochende


----------



## Rydl (29. Aug 2009)

thommy.s hat gesagt.:


> @Rydl
> 
> ich instanziiere das Array in Zeile 12 und lese es in Zeile 13 ein:
> 
> ...



bitte sehr, darauf wollte hinaus


----------

