如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]
Posted
技术标签:
【中文标题】如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]【英文标题】:how to retrieve image from mysql database using java servlet and show it in HTML img tag? [closed] 【发布时间】:2013-01-13 01:14:31 【问题描述】:如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 html img 标签中?并且那个 ima 标记应该放在表定义中?
【问题讨论】:
你试过什么?你的确切目标是什么?简单的答案是创建一个 servlet,它返回一个HTML
文档,该文档包含一个 <img>
元素,该元素具有从数据库中检索到的 src
属性。
【参考方案1】:
类似下面的代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException
Blob image = null;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
ServletOutputStream out = response.getOutputStream();
try
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://127.0.0.0:3306/
example","root","root"); // localhost:<defaultport>
stmt = con.createStatement();
rs = stmt.executeQuery("select image from pictures where id = '2'");
if (rs.next())
image = rs.getBlob(1);
else
response.setContentType("text/html");
out.println("<font color='red'>image not found for given id</font>");
return;
response.setContentType("image/gif");
InputStream in = image.getBinaryStream();
int length = (int) image.length();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
while ((length = in.read(buffer)) != -1)
out.write(buffer, 0, length);
in.close();
out.flush();
catch (Exception e)
response.setContentType("text/html");
out.println("<html><head><title>Unable To Display image</title></head>");
out.println("<body><h4><font color='red'>Image Display Error=" + e.getMessage() +
"</font></h4></body></html>");
return;
finally
try
rs.close();
stmt.close();
con.close();
【讨论】:
但我想在 HTML 中使用 标签显示它【参考方案2】:编写一个 servlet,将其映射到像 showImage.html
这样的 url,将图像名作为参数传递
<img src="showImage.html?filename=new.jpg">
然后从文件中读取字节[]并写入servlet代码中的响应OutputStream。
response.getOutputStream().write(bytes);
从文件中获取字节[]
RandomAccessFile f = new RandomAccessFile("c:\images\pic1.png", "r");
byte[] bytes = new byte[(int)f.length()];
f.read(bytes);
response.getOutputStream().write(bytes);
【讨论】:
谢谢你。你能详细解释一下吗?如果你粘贴代码会更有用。 您是否有要读取的图像文件名/路径?如果是这样,请使用上面的代码(我编辑了答案)从该文件中获取 Byte[]。 谢谢你。其实我想从 mysql 数据库中检索图像。以上是关于如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用一个ajax请求从java servlet返回多个json对象