我需要从MySQL DB中检索图像。 我从某处获得了代码片段,但无法在jQuery面板中正确显示图像。 代码在新的JSP页面中运行。 谁能告诉我如何在我的应用程序中有效地使用outputstream?
我的代码是:
<% @page import = "java.sql.*" %>
<% @page import = "java.io.*" %>
<% Blob image = null;
Connection con = null;
byte[] imgData = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/aes", "root", "password");
stmt = con.createStatement();
rs = stmt.executeQuery("select PHOTO from tab_1 where name ='" + name + "'");
if (rs.next()) {
image = rs.getBlob(1);
imgData = image.getBytes(1, (int) image.length());
} else {
out.println("image not found for given id>");
return;
}
// display the image
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
o.write(imgData);
o.flush();
o.close();
} catch (Exception e) {
out.println("Unable To Display image");
out.println("Image Display Error=" + e.getMessage());
return;
} finally {
try {
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
%>
答案 0 :(得分:0)
JSP是错误的工具。 JSP是一种视图技术。 <% %>
之外的任何空格也将被打印/发送到响应中。在你的情况下,确切地说,空白会使图像的二进制完整性变得不正确,因此图像最终会被破坏并且不可撤销。
你基本上有两个选择。
简单/懒惰的方式:全部删除,我的意思是所有,<% %>
以外的空格,包括换行符。
使用正确的工具:创建一个扩展HttpServlet
的类,并将您在JSP中的代码移动到doGet()
方法中。最后只需调用该servlet而不是JSP。