从Oracle中数据库中读取以Blob类型存储的图片显示在jsp页面中

18 篇文章 0 订阅
6 篇文章 0 订阅

  在之前的项目中做文件上传的时候比较多。实现文件上传,我们有两种实现思路:第一就是将文件上传到服务器的某一位置,然后在数据库中存储文件的服务器上的位置。第二就是直接把文件存储到数据库中。

  图片也是文件的一种。这里我们主要讨论以第二种方式存储到Oracle数据库的图片信息如何显示在jsp页面中。

我在项目使用的struts2框架实现的。现在我先描述一下我的需求,请看图片:在用户基本信息 下显示用户已上传的图片。



jsp代码:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

</head>
<body>
	<!-- <div id="watermark" class="watermark"> -->
	<div id="tablelist" class="table-list">
		<div class="table-list" id="buttons">
			<table width="50%" border="0" align="center" bgcolor="#6C92AD">
				<tr bgcolor="#EFF7EE" height="50pt" align="center">
					<td colspan="5"><font
						style="font-size: 20px; font-weight: bold;">用户基本信息</font></td>
				</tr>
				<tr bgcolor="#EFF7FF" height="40pt">
					<td width="10%" bgcolor="#EFF7FF" align="center" valign="middle">姓名</td>
					<td width="30%" bgcolor="#FFFFFF" valign="middle">
						${uservo.name}</td>
					<td width="10%" bgcolor="#EFF7FF" align="center" valign="middle">身份证号</td>
					<td width="30%" bgcolor="#FFFFFF" valign="middle">
						${uservo.idno}</td>
					<td width="20%" bgcolor="#FFFFFF" rowspan="3" valign="middle"><img src="scorerecord!getImage.action?idNo=${uservo.idno}"></img></td>
				</tr>
				<tr bgcolor="#EFF7FF" height="40pt">
					<td width="10%" bgcolor="#EFF7FF" align="center" valign="middle">性别</td>
					<td width="30%" bgcolor="#FFFFFF" valign="middle">
						${uservo.sex}</td>
					<td width="10%" bgcolor="#EFF7FF" align="center" valign="middle">职称</td>
					<td width="30%" bgcolor="#FFFFFF" valign="middle">
						${uservo.zhicheng}</td>
				</tr>
				<tr bgcolor="#EFF7FF" height="40pt">
					<td width="10%" bgcolor="#EFF7FF" align="center" valign="middle">所属单位</td>
					<td width="30%" bgcolor="#FFFFFF" valign="middle">
						${uservo.danwei}</td>
					<td width="10%" bgcolor="#EFF7FF" align="center" valign="middle">岗位</td>
					<td width="30%" bgcolor="#FFFFFF" valign="middle">
						${uservo.gangwei}</td>
				</tr>
			</table>
		</div>		
	</div>
</body>
</html>

主要的就是这一行代码:<img src="scorerecord!getImage.action?idNo=${uservo.idno}"></img>

src指向一个action

action代码:

/**
	 * 获取图片
	 * @param userExamInfo
	 */
	public String getImage(){
		List<UserExamInfo> userExamList = userExamManager.findByIdNo(idNo); 
		UserExamInfo userExamInfo = userExamList.get(0);   //获取一个实体,实体中content字段存储的是图片信息
		Blob photo = userExamInfo.getCONTENT();
		HttpServletResponse response = null;
		ServletOutputStream sout = null;
		
		try {
			response = ServletActionContext.getResponse();
			response.setContentType("multipart/form-data");
			InputStream in = photo.getBinaryStream();
			sout = response.getOutputStream();
			byte b[] = new byte[1024];
			int len = in.read(b);
			while(len!=-1){
				sout.write(b);
				len = in.read(b);
			}
			sout.flush();
			sout.close();
			in.close();
			response.flushBuffer(); 
		} catch (SQLException e) {
			e.printStackTrace();
		}catch (IOException e){
			e.printStackTrace();
		}
		return null;
	}
UserExamInfo.java代码

package com.mongodb.integrity.entity;

import java.sql.Blob;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="CERTIFICATEINFO")
public class UserExamInfo {
	private String NAME;        //姓名
	private String IDENTITYID;  //身份证号
	private Blob CONTENT;     //照片
	@Id
	private String CERTIFNO;    //证书编号
	private String EXAMINEEDEP; //所属单位
	private String CERTIFNAME;  //证书名称
	private String ROLEINFO;    //岗位
	private Date CREATETIME;    //证书生效时间
	private String CLOSINGDATE; //证书失效时间
	private String EXAMDATE;    //考试时间
	
	public String getNAME() {
		return NAME;
	}
	public void setNAME(String nAME) {
		NAME = nAME;
	}
	public String getIDENTITYID() {
		return IDENTITYID;
	}
	public void setIDENTITYID(String iDENTITYID) {
		IDENTITYID = iDENTITYID;
	}
	
	public Blob getCONTENT() {
		return CONTENT;
	}
	public void setCONTENT(Blob cONTENT) {
		CONTENT = cONTENT;
	}
	public String getCERTIFNO() {
		return CERTIFNO;
	}
	public void setCERTIFNO(String cERTIFNO) {
		CERTIFNO = cERTIFNO;
	}
	public String getEXAMINEEDEP() {
		return EXAMINEEDEP;
	}
	public void setEXAMINEEDEP(String eXAMINEEDEP) {
		EXAMINEEDEP = eXAMINEEDEP;
	}
	public String getCERTIFNAME() {
		return CERTIFNAME;
	}
	public void setCERTIFNAME(String cERTIFNAME) {
		CERTIFNAME = cERTIFNAME;
	}
	public String getROLEINFO() {
		return ROLEINFO;
	}
	public void setROLEINFO(String rOLEINFO) {
		ROLEINFO = rOLEINFO;
	}
	public Date getCREATETIME() {
		return CREATETIME;
	}
	public void setCREATETIME(Date cREATETIME) {
		CREATETIME = cREATETIME;
	}
	public String getCLOSINGDATE() {
		return CLOSINGDATE;
	}
	public void setCLOSINGDATE(String cLOSINGDATE) {
		CLOSINGDATE = cLOSINGDATE;
	}
	public String getEXAMDATE() {
		return EXAMDATE;
	}
	public void setEXAMDATE(String eXAMDATE) {
		EXAMDATE = eXAMDATE;
	}
}
  后台代码通过身份证号查询和我们平时做得一样。



  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 JSP 页面读取数据库BLOB 类型的值并打印图片,可以使用以下步骤: 1. 在 JSP 页面引入数据库连接的 Java 类,并创建一个连接对象。 2. 写一个 SQL 查询语句,查询包含 BLOB 类型的字段的数据。 3. 执行查询语句,并使用 ResultSet 对象获取查询结果。 4. 使用 ResultSet 对象的 getBinaryStream 方法获取 BLOB 类型字段的二进制流。 5. 将二进制流输出到 JSP 页面,同时设置输出的内容类型图片格式。 以下是一个简单的示例代码: ```java <%@ page import="java.sql.*" %> <% Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 创建连接对象 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); // 查询BLOB类型的字段 String sql = "SELECT blob_field FROM my_table WHERE id = ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); rs = pstmt.executeQuery(); // 获取BLOB类型字段的二进制流并输出 if (rs.next()) { InputStream is = rs.getBinaryStream("blob_field"); response.setContentType("image/jpeg"); OutputStream os = response.getOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) != -1) { os.write(buffer, 0, length); } os.close(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } %> ``` 注意,这只是一个简单的示例,实际应用需要根据具体情况进行修改。同时,需要确保数据库存储BLOB 类型数据图片类型的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值