Guybrush Threepwood Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 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...
perdian Geschrieben 12. Oktober 2009 Geschrieben 12. Oktober 2009 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?
Schiller256 Geschrieben 12. Oktober 2009 Geschrieben 12. Oktober 2009 Zum Thema Mime Type Erkennung hier ein kleines Java Werkzeug was dir eventuell helfen kann. mime-util (Mime Detection Utility)
Guybrush Threepwood Geschrieben 16. Oktober 2009 Autor Geschrieben 16. Oktober 2009 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden