Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich schicke per HttpServlet eine Datei an den Browser. Diese kommt auch korrekt im Browser an, allerdings macht dieser (IE8) immer direkt das Downloadfenster auf statt die Datei im Browser darzustellen obwohl er das könnte.

Was muss ich tun damit der Browser die Datei direkt anzeigt und das Downloadfenster nur öffnet wenn er sie nicht anzeigen kann? Ich dachte Eigentlich das das nur über den MIME Type bestimmt wird, dem scheint aber nicht so zu sein


protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
//Datei auslesen
//...


String ext = filename.substring(filename.lastIndexOf('.')+1);

if (ext.contentEquals("bmp"))
resp.setContentType("image/bmp");
else if (ext.contentEquals("jpg"))
resp.setContentType("image/jpeg");
else if (ext.contentEquals("png"))
resp.setContentType("image/png");
else if (ext.contentEquals("doc"))
resp.setContentType("application/msword");
else if (ext.contentEquals("pdf"))
resp.setContentType("application/pdf");

resp.setHeader("Content-Disposition", "attachment;filename=\"" +
filename + "\"");

resp.setContentLength(result.getRawData().length);
resp.getOutputStream().write(result.getRawData());

}
[/PHP]

PS: falls jemand eine vernünftige Möglichkeit kennt den Mime Type anhand der Dateiendung zu bestimmen wäre ich auch dankbar. Oben das ist erstmal nur ne Notlösung (hoffentlich)

PPS: Ich hab auch schon die Content-Disposition auf inline gestellt. Allerdings stellt der Browser den Dateiinhalt immer dar auch wenn er nichts damit anfangen kann. Das heißt bei einer Excel Datei zum Beispiel wird einfach wilder Text angezeigt...

Geschrieben

Der Fehler liegt hier:

resp.setHeader("Content-Disposition", "[b]attachment[/b];filename=\"" + filename + "\"");
zwingt den Browser dazu das ganze als Download zu behandeln, auch wenn er es inline darstellen könnte. It's not a bug, it's a feature ;-) Siehe auch RFC 2183 Die Lösung ist aber auch relativ einfach:
resp.setHeader("Content-Disposition", "[b]inline[/b]");

PPS: Ich hab auch schon die Content-Disposition auf inline gestellt. Allerdings stellt der Browser den Dateiinhalt immer dar auch wenn er nichts damit anfangen kann. Das heißt bei einer Excel Datei zum Beispiel wird einfach wilder Text angezeigt...
Kann ich eigentlich nicht nachvollziehen. Ich habe in diversen Projekten Excel (in verschiedensten Versionen) geschickt und hat immer einwandfrei funktioniert.

Hast du den Content-Length Header mitgeschickt?

Geschrieben

Hast du den Content-Length Header mitgeschickt?

Ja, aber ich konnte das Problem zwischenzeitlich lösen indem ich den

Content-Disposition Header einfach komplett weggelassen habe. So wirds angezeigt wenn der Browser es kennt und ansonsten als Download angeboten.

Zum Thema Mime Type Erkennung hier ein kleines Java Werkzeug was dir eventuell helfen kann.

mime-util (Mime Detection Utility)

Danke ich schaus mir mal an

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...