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 und file 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.
InformationsquelleAutor user3599482 | 2014-05-04
Schreibe einen Kommentar