gpt4 book ai didi

image - 将数据库中的图像显示为字节 [] 作为 JSF 页面中的图形图像

转载 作者:行者123 更新时间:2023-12-01 07:25:37 24 4
gpt4 key购买 nike

我的图片内容为 byte[]从数据库。

private byte[] image;

如何在 JSF 页面中将该字节数组显示为真实的图形图像?

最佳答案

这不能通过 <h:graphicImage> 直接实现.它只能指向一个 URL,不能指向 byte[]也不是 InputStream .基本上,您需要确保这些字节可直接用作给定 URL 上的 HTTP 响应,然后您可以在 <h:graphicImage> 中使用这些字节。 (甚至是纯 HTML <img> )。

假设您通过其 ID 识别图像,如下所示:

<h:graphicImage value="/image/#{someBean.imageId}" />

这是此类 servlet 的启动示例:
@WebServlet("/image/*")
public class ImageServlet extends HttpServlet {

@EJB
private ImageService service;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Long id = Long.valueOf(request.getPathInfo().substring(1));
Image image = service.find(id);
response.setContentType(getServletContext().getMimeType(image.getName()));
response.setContentLength(image.getBytes().length);
response.getOutputStream().write(image.getBytes());
}

}

一个更高级的静态资源 servlet 抽象模板,支持 HTTP 缓存,可以在 this answer 中找到。 ,以及从数据库提供服务的具体示例。

如果您碰巧使用 JSF 实用程序库 OmniFaces在 JSF 2.2 + CDI 环境中,您可以改用它的 <o:graphicImage> 这可以更直观地使用。
<o:graphicImage value="#{imageBean.getBytes(someBean.imageId)}" />
@Named
@ApplicationScoped
public class ImageBean {

@EJB
private ImageService service;

public byte[] getBytes(Long imageId) {
return service.getImageBytes(imageId);
}

}

关于image - 将数据库中的图像显示为字节 [] 作为 JSF 页面中的图形图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com