Dateidownload fehlerhaft

Status
Nicht offen für weitere Antworten.

thommy.s

Aktives Mitglied
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:

Java:
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
 
Zuletzt bearbeitet:

musiKk

Top Contributor
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

Bekanntes Mitglied
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

Aktives Mitglied
@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:

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

 in.read();

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

Richtig ist also:

Java:
 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

Bekanntes Mitglied
@Rydl

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

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

 in.read();

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

Richtig ist also:

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

 in.read(filearray);

bitte sehr, darauf wollte hinaus ;)
 
Status
Nicht offen für weitere Antworten.

Oben