之前讲了如何将图片上传到数据库,我们是通过将图片转换为二进制数组再保存进数据库的,数据库字段使用的是LONGBLOB类型。那么今天来说一下怎么将保存进去的图片读取到页面上。
由于其他数据与图片返回的类型不同,所以图片信息是不与其他文字信息一起返回给页面的。先在Dao中写查询方法
public Trends findTrendsById(int trendsid) {
Trends trends = null;
try {
String findTrendsById = "select trends.*,user.username from trends inner join user on trends.userid=user.userid where trendsid=?";
con=DbUtil.getConnection();
ps=con.prepareStatement(findTrendsById);
ps.setInt(1, trendsid);
rs=ps.executeQuery();
trends = new Trends();
trends.setTrendsid(rs.getInt("trendsid"));
trends.setTrendsname(rs.getString("trendsname"));
trends.setTrendsdate(rs.getTimestamp("trendsdate"));
trends.setTrendsimg(rs.getBytes("trendsimg"));//通过rs.getBytes()来接收图片的byte数组
trends.setUserid(rs.getInt("userid"));
trends.setUsername(rs.getString("username"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DbUtil.close(con, ps, rs);
}
return trends;
}
在servlet中需要添加两个方法,分别是查询其他信息的方法和查询图片信息的方法
/**
*查询动态信息
*/
public void findTrendsById(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
int id=Integer.parseInt(request.getParameter("trendsid"));
Trends trends = userSer.findTrendsById(id);
//以下略.........................
下面是查询图片的方法
/**
*查询图片
*/
public void findImgById(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//response.setHeader() 设置响应报头,在这里设置为不可缓存
byte[] img = null;//通过一个byte[]来接收图片
int id=Integer.parseInt(request.getParameter("trendsid"));
Trends trends = new Trends();
trends = userSer.findTrendsById(id);
img=trends.getTrendsimg();
//OutputStream 以流的形式将图片信息返回给页面
OutputStream outputStream = response.getOutputStream();
outputStream.write(img);
outputStream.flush();//排出流中所有数据
outputStream.close();//关闭流
}
在jsp页面中,使用一个img标签接收返回值
if((data[i].trendsimg).length!=0){
//img标签的src中放入请求链接
$("#trendscon"+ i +" .trendsbody").append('<img class="trendsimg" src="${ctx}/servlet/UserServlet?fun=findImgById&trendsid='+ data[i].trendsid+ '" />');
}