Serve static image file from file system to servlet?

How can I serve an image file in a file system from a servlet?

+3
source share
2 answers

Have a look here: Depot example: Returning an image to a servlet Link broken. First reverse copy inserted below:

// This method is called by the servlet container to process a GET request.
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    // Get the absolute path of the image
    ServletContext sc = getServletContext();
    String filename = sc.getRealPath("image.gif");

    // Get the MIME type of the image
    String mimeType = sc.getMimeType(filename);
    if (mimeType == null) {
        sc.log("Could not get MIME type of "+filename);
        resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return;
    }

    // Set content type
    resp.setContentType(mimeType);

    // Set content size
    File file = new File(filename);
    resp.setContentLength((int)file.length());

    // Open the file and output streams
    FileInputStream in = new FileInputStream(file);
    OutputStream out = resp.getOutputStream();

    // Copy the contents of the file to the output stream
    byte[] buf = new byte[1024];
    int count = 0;
    while ((count = in.read(buf)) >= 0) {
        out.write(buf, 0, count);
    }
    in.close();
    out.close();
}
+2
source

Well, it's a shame that the servlet specification has no clear way to do this if the image is not under the webapp tree. Servlet containers are generally not advised to use their own methods. Obviously, a container needs to do this to serve files, why doesn't it reveal functionality? Why not HttpServletResponse.sendFile(File)?

, webapp.

0

Source: https://habr.com/ru/post/1790099/


All Articles