【问题标题】:How to display images from database in JSF如何在 JSF 中显示数据库中的图像
【发布时间】:2012-03-10 18:27:09
【问题描述】:

我有以 BLOB 形式存储在数据库中的图像。现在我可以使用 Richfaces mediaOutput 标签在我的 jsf 页面中显示它们。

当图像存储在数据库中时,图像是否可以具有类似“/images/image.jpg”的路径。

在寻找答案时,我遇到了这样的事情:

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

最好的问候, 伊利亚·西多罗维奇

【问题讨论】:

    标签: java mysql jsf


    【解决方案1】:

    你可以编写一个 servlet 来接收对/image/* 的每个请求或适合你的东西。 在您的 servlet 中,您可以通过请求参数从数据库中检索正确的数据。 然后你通过

    写出数据
    response.getOutputStream().write(content); 
    

    (内容是你图像的字节数组)

    【讨论】:

      【解决方案2】:

      感谢 roel 和 BalusC!

      如果有人遇到此问题,您可以这样做。

          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) {}
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-26
        • 2013-05-31
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多