2 Stimmen

Anzeige des Bildes mit absolutem Pfad in JSP

Ich verwende Java, JSP und Jetty, um eine Website zu entwickeln.

Ich habe Probleme mit den Bildpfaden, die im -Tags übergeben werden.

In meiner Datenbank habe ich den absoluten Linux-Pfad der Benutzerbilder. Ich nehme diesen Wert und setze ihn in das "src"-Attribut.

Ich habe den Pfad, zum Beispiel:

  • /home/website/images/image1.png

Wenn ich es so mache, erscheint das Bild nicht. Ich habe lange darüber nachgedacht und bin zu dem Schluss gekommen, dass dies natürlich ist, da ich noch nie auf einer Website ein Bild mit einem solchen Pfad zu einem absoluten Betriebssystempfad gesehen habe.

Was muss ich also tun?

Muss ich die Konfiguration von Jetty ändern? Muss ich Java-Code ausführen?

Bei meiner Suche in Google wurde ich nur noch verwirrter. Ich hätte gerne eine Erklärung.

UPDATE (26/03/2013)

Ich habe eine Möglichkeit gefunden, dieses Problem zu lösen:

http://balusc.blogspot.com.br/2007/04/imageservlet.html

Danke BalusC! hauhauhahaua

2voto

BalusC Punkte 1034465

Bitte beachten Sie, dass der auf eine öffentliche Web-URL verweisen muss, nicht auf einen lokalen Dateisystempfad. Ihre Bilder müssen über einen HTTP-Request verfügbar sein. Der Webbrowser muss sie herunterladen, nicht der Webserver muss sie irgendwie einbinden.

Der einfachste Weg für Anfänger wäre, ein Servlet zu erstellen, das den Bildinhalt als InputStream durch FileInputStream basierend auf dem Anfrageparameter oder Pfadinformationen erhält und dann auf die übliche Java-IO-Weise an den OutputStream des HttpServletResponse schreibt, nachdem die erforderlichen HTTP-Antwortheader gesetzt wurden, damit der Browser weiß, wie er damit umgehen soll.

Zum Beispiel, vorausgesetzt, dass das Servlet auf /images/* abgebildet ist und Sie das Bild öffnen als http://example.com/contextpath/images/image1.png:

String dateiname = request.getPathInfo();
File datei = new File("/home/website/images", dateiname);

response.setHeader("Content-Type", getServletContext().getMimeType(dateiname));
response.setHeader("Content-Length", String.valueOf(datei.length()));

InputStream eingabe = new FileInputStream(datei);
OutputStream ausgabe = response.getOutputStream();
// Bytes wie gewohnt übertragen.

Alternativ können Sie /home/website/images als neuen Webanwendungscontext dem Server hinzufügen mit dem Kontextpfad /images. Auf diese Weise wäre das Bild verfügbar unter http://example.com/images/image1.png Sie sind nur davon abhängig, wie der Servlet-Container konfiguriert ist und ob Sie volle Administratorrechte darüber haben. Für Jetty wäre das folgendermaßen, wenn Sie es programmgesteuert verwalten:

server.setHandler(new WebAppContext("/home/webapp/images", "/images"));

Oder wenn Sie es über XML verwalten:

    /home/website/images
    /images

0voto

jmort253 Punkte 33083

Es sieht so aus, als ob du den Dateipfad auf dem Dateisystem im src-Attribut verwendest, anstatt die URL, die die Ressource eindeutig identifiziert.

Absolute Pfade sind nicht absolut vom Dateisystem aus, sondern absolut vom Root deines Webservers aus. Außerdem können diese URL-Ressourcenbezeichner sogar geändert oder modifiziert werden, um auf verschiedene Ordner auf deinem Server oder sogar auf dynamische Ressourcen zu verweisen.

Hier ist ein Beispiel:

Pfad zur Datei auf dem Server:

/home/website/images/image1.png

example.com ist auf den "website"-Ordner abgebildet:

Wenn du eine relative URL verwendest, siehst du vielleicht:

Um die absolute URL zu verwenden, benötigst du das HTTP-Schema:

Zusammenfassend: Die Verwendung von Dateipfaden zur Identifizierung von Ressourcen auf deinem Server im HTML auf der Clientseite ist einfach falsch und funktioniert nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X