How to display images from a database in JSF

I have images that are stored in the database as a BLOB. Now I can display them on my jsf pages using the Richfaces mediaOutput tag.

Is it possible for images to have a path like "/images/image.jpg" while the images are stored in a database.

While searching for an answer, I came up something like this:

@GET @Path("/files/{filename}") @Produces(MediaType.WILDCARD) 

Sincerely, Ilya Sidorovich

+3
source share
2 answers

You can write a servlet typing each request /image/* or whatever suits you. And in your servlet, you get the correct data from your database through query parameters. And you write data through

 response.getOutputStream().write(content); 

(content is a byte of your image)

+4
source

Thanks Roel and Balus!

If anyone encounters this problem, here is what you can do.

  package org.gicm.test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.inject.Inject; import java.io.BufferedOutputStream; import java.io.BufferedInputStream; import org.gicm.cms.CMSDao; import org.gicm.model.UploadedImage; @WebServlet("/images/*") public class TestServlet extends HttpServlet { @Inject private CMSDao cms; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String imageId = String.valueOf(request.getPathInfo().substring(1)); // Gets string that goes after "/images/". UploadedImage image = cms.findImage(imageId); // Get Image from DB. response.setHeader("Content-Type", getServletContext().getMimeType(image.getName())); response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\""); BufferedInputStream input = null; BufferedOutputStream output = null; try { input = new BufferedInputStream(image.getData()); // Creates buffered input stream. output = new BufferedOutputStream(response.getOutputStream()); byte[] buffer = new byte[8192]; for (int length = 0; (length = input.read(buffer)) > 0;) { output.write(buffer, 0, length); } } finally { if (output != null) try { output.close(); } catch (IOException logOrIgnore) {} if (input != null) try { input.close(); } catch (IOException logOrIgnore) {} } } } 
+1
source

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


All Articles