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... Zitieren
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? Zitieren
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) Zitieren
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 Zitieren
Empfohlene Beiträge
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.