当前位置: 首页 > 面试题库 >

通过JSP显示BLOB(图像)

李博达
2023-03-14
问题内容

我有一个代码可以显示员工图表。

数据(名称,电话,照片等)存储在SQLServer中,并通过JSP显示。可以正常显示数据,但图像.jpg(存储在IMAGE = BLOB列中)除外。

顺便说一句,我已经显示了图像(请参见下面的代码),但是我不知道如何将其放在.css定义的区域中(也请参见以下代码),因为图像是通过resultSet被加载到浏览器的整个页面中。

有谁知道我如何“构图”图像?

<%
Connection con = FactoryConnection_SQL_SERVER.getConnection("empCHART");
Statement stSuper = con.createStatement();
Statement stSetor = con.createStatement();

Blob image = null;
byte[] imgData = null;

ResultSet rsSuper = stSuper.executeQuery("SELECT * FROM funChart WHERE dept = 'myDept'");

if (rsSuper.next()) {
image = rsSuper.getBlob(12);
imgData = image.getBytes(1, (int) image.length());
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
//o.write(imgData); // even here we got the same as below.
//o.flush();
//o.close();

--[...]

<table style="margin: 0px; margin-top: 15px;">
<tr>
<td id="photo">
<img title="<%=rsSuper.getString("empName").trim()%>" src="<%= o.wite(imageData); o.flush(); o.close(); %>" />
</td>
</td>

<td id="empData">
<h3><%=rsSuper.getString("empName")%></h3>
<p><%=rsSuper.getString("Position")%></p>
<p>Id:<br/><%=rsSuper.getString("id")%></p>
<p>Phone:<br/><%=rsSuper.getString("Phone")%></p>
<p>E-Mail:<br/><%=rsSuper.getString("Email")%></p>
</td>
</table>

这是应该构图的片段:

#photo
{
    padding: 0px;
    vertical-align: middle;
    text-align: center;
    width: 170px;
    height: 220px;
}

提前致谢 !


问题答案:

您在这里犯了一些根本性的错误。在<img src>必须指向一个网址,不包含图像的二进制内容。JSP页面本身的内容类型不应设置为image/gif。应将其默认设置为text/html。正如您所期望的那样,Web服务器应该在HTML结果中包含具体图像是不正确的。正是网络浏览器根据src属性中找到的URL单独下载图像,然后相应地显示它们。

最简单的方法是创建一个单独的servlet,该servlet将图像从DB流传输到响应主体。您可以通过请求参数或路径信息来唯一标识图像。这是一个使用request参数的示例:

<img src="imageServlet?id=<%=rsSuper.getString("id")%>" />

doGet()然后,该方法应 基本上 执行此工作:

String id = request.getParameter("id");

// ...

InputStream input = resultSet.getBinaryStream("imageColumnName");
OutputStream output = response.getOutputStream();
response.setContentType("image/gif");
// Now write input to output the usual way.

具体问题 无关 的是,自十年以来,强烈建议不要以这种方式使用 scriptlet
。也许您正在阅读完全过时的书籍/教程,或者正在维护古老的JSP Web应用程序。



 类似资料:
  • 问题内容: 我设法将图像以Blob的形式存储在mysql数据库中。(我也在使用hibernate模式)现在我试图加载该图像并将其发送到jsp页面上,以便用户可以查看该图像。 这是我的struts 2动作课 这是我的图片课 您能告诉我我应该在动作类,jsp页面和struts.xml中放置什么以显示存储的图像吗? 问题答案: 最终,我为未来的Google员工解决了这一问题: 将此行添加到jsp, 这是

  • 问题内容: 我有个问题。我不知道如何通过单击JButton显示图像。 我有一个可以显示和隐藏图像的类: 我正在使用MVC,所以我想在我的控制器地图中使用JButton的代码,但是我不知道该怎么做。 单击按钮保持器时需要显示图像。 问题答案: 就像别人说的一样,总是用来显示图像。这样,很容易在需要时添加/删除它们,而不是绘画。此外,在您的代码中您正在重写,因为如果所讨论的组件具有一个,我们希望重写各

  • 我创建了一个动态web项目,以便通过Servlet显示JSP(我不能使用任何类似Spring的框架…)。默认情况下,我构建的类放在Build/classes中,因此在我将输出文件夹更改为WebContent/WEB-INF/classes后,我的应用程序运行良好。之后,我将该项目转换为Maven项目。(我不记得我上次使用servlet/JSP时需要更改输出文件夹,那是3年前!)。 无论如何,现在我

  • 问题内容: 嗨,我的数据库中有一个图像表。这些与细节一起存储为Blob,例如图像类型和名称。 我在显示图像时遇到问题,我得到的只是一个带有红色十字的白框。码: 谢谢 问题答案: 好吧,这是一个简短的答案。 检查您的Blob类型是否至少为MEDIUMBLOB,它能够存储高达16M的数据

  • 问题内容: 这个问题已经在这里有了答案 : 如何从MySQL数据库检索图像并显示在html标记中 (6个答案) 4年前关闭。 我试图显示存储在数据库的BLOB列中的图像; 我使用SELECT从数据库中获取数据,不对数据进行任何转换,并显示以下内容(从仅输出以下内容的脚本中显示): 请注意,chrome正在将内容大小显示为图像的正确大小以及正确的mime类型()。在头文件和ive检查数据库中的blo

  • 我试图通过Azure功能从Azure Blob存储中获取文件并在浏览器中显示它们。当我导航到url时,我可以设法下载文件,但我无法在浏览器中将它们显示为静态文件/图像。 我只想在浏览器中显示,而不是下载。 我尝试了一些sdk命令,但没有成功。以下是我尝试过的: 任何想法将不胜感激。谢谢!