Wie Bild aus lokalen Pfad aus jsp
Ich bin versucht, ein Bild anzuzeigen, werfen jsp. Bild ist gespeichert in den lokalen Pfad, also schrieb ich ein servlet get-Methode ermittelt werden Bild-und im src-Attribut des image-tag gebe ich dem servlet-Namen und Bild-Pfad als parameter an Servlets und hier ist mein code,
public class FileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final int DEFAULT_BUFFER_SIZE = 10240; //10KB.
private String filePath;
public void init() throws ServletException {
this.filePath = "/files";
}
protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("In do get");
//Get requested file by path info.
String requestedFile = request.getPathInfo();
//Check if file is actually supplied to the request URI.
if (requestedFile == null) {
//Do your thing if the file is not supplied to the request URI.
//Throw an exception, or send 404, or show default/warning page, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND); //404.
return;
}
//Decode the file name (might contain spaces and on) and prepare file object.
File file = new File(filePath, URLDecoder.decode(requestedFile, "UTF-8"));
//Check if file actually exists in filesystem.
if (!file.exists()) {
//Do your thing if the file appears to be non-existing.
//Throw an exception, or send 404, or show default/warning page, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND); //404.
return;
}
//Get content type by filename.
String contentType = getServletContext().getMimeType(file.getName());
//If content type is unknown, then set the default value.
//For all content types, see: http://www.w3schools.com/media/media_mimeref.asp
//To add new content types, add new mime-mapping entry in web.xml.
if (contentType == null) {
contentType = "application/octet-stream";
}
//Init servlet response.
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType(contentType);
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
//Prepare streams.
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
//Open streams.
input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
//Write file contents to response.
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
//Gently close streams.
close(output);
close(input);
}
}
protected final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("In do post");
}
private static void close(Closeable resource) {
if (resource != null) {
try {
resource.close();
} catch (IOException e) {
//Do your thing with the exception. Print it, log it or mail it.
e.printStackTrace();
}
}
}
in web.xml die servlet-Eintrag ist wie folgt,
<servlet>
<description>
</description>
<display-name>FileServlet</display-name>
<servlet-name>FileServlet</servlet-name>
<servlet-class>com.mypackage.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/file/*</url-pattern>
</servlet-mapping>
In Jsp habe ich img-tag wie folgt,
<img alt="Image" src="file/D:/uploads/img14.jsp" width="160" height="160" class="img-thumbnail">
Ich glaube, ich machte Fehler im src-Attribut des img-tag, kann jemand sagen, wei ist der Fehler den ich hier gemacht .
- Das ist etwas, sollten Sie in der Lage sein, zu Debuggen, indem Sie sich. Verwenden Sie Ihre debugger oder System.aus.printlns, um zu wissen, was der Wert von
requestedFile
undfile
sind. Hüten Sie sich vor die riesige Sicherheitslücke, dass man die öffnung mit der servlet. Sie nicht möchten, dass alle Benutzer Zugriff auf jede Datei auf Ihrem server. Auch .jsp ist eine seltsame Dateiendung für ein Bild.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aussieht hast du falsch verstanden BalusC s post dazu: FileServlet. In diesem Fall müssen Sie einen Basis-Pfad in Ihrer Festplatte, um Ihre server-Dateien (externe web-application-Ordner-Pfad in server), und dann den Pfad in der URL wird verwendet, um die Suche innen diese Basis Weg. Anmerkung von BalusC Beispiel wie nennen die Ressourcen:
Wo:
Datei ist das URL-Muster für Ihre Servlet. Notiert in Ihrem web.xml Konfiguration:
Den rest der URL /foo.exe ist der Speicherort der Datei in Ihrem server-Festplatte. Diese kann einfach ermittelt werden, die durch die Nutzung der
HttpServletRequest.html#getPathInfo
Dies ist bereits von diesem Teil des Codes (Kommentare sind von mir):
Dann, wenn man eine Anfrage wie diese (in den HTML-code in Ihre Ansicht):
Müssen Sie sicherstellen, dass die Datei vorhanden ist in Ihrem server:
Mehr info:
<img src="">
und wo das servlet füllen versuchen, es zu finden. Wenn Sie wissen, alle Ihre Dateien werden in D:/uploads dann ändernfilePath
Wert in Ihrem servet aus"/files"
zu"D:\\uploads"
.Den Fehler, den du gemacht, ist zu versuchen, rufen Sie Ihre JSP-Seite als Bild-Ressource. Der JSP selbst ist nur eine text-Datei. Sie müssen ersetzen Sie den Pfad zu der Datei mit der url der Seite auf einem server kompiliert werden/dienen die Ergebnisse der JSP-Seite, nämlich das Bild. Wenn es auf einem lokalen server, der normalerweise die url Aussehen wird
http://localhost:<port>/.../img14.jsp
.src
- Attribut auf eine url dienen das Bild, nicht die JSP-Datei selbst. Und während ich kann nicht Debuggen von code, ich vermute, der Dateipfad muss pint, um das eigentliche Bild-Datei.\file
.src
sollte eine url enthalten, die auf der JSP-Datei. Innerhalb der JSP-Datei, der Pfad sollte so etwas wieD:/uploads/img14.jsp
- keine\file
Präfix. Das ist es. Viel Glück.D:/
oder jeder server, der bestimmte Daten (wie OS) überhaupt.Ihrem src-Attribut des img-tag sollte wie folgt sein senden Anfrage an den servlet.
src="${pageContext.request.contextPath}/FileServlet/getImage?path=D:\offline_registration\11022017\unzip\a89a89e9-5de2-4bb2-9225-e465bb5705b1.jpeg"
hier Pfad-variable enthält den Pfad des Bildes von "local system".
Ich versucht habe folgenden code und es funktioniert in beide servlet und java. Wenn das Bild konvertiert wird als byte-servlet mit dem folgenden code legen Sie dann die konvertierten byte-code in der session-Attribut und get es jsp.
Hinweis: es können alle format Bild