Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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...

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?

  • Autor

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.