将Oracle中Blob字段存储的图片转换成字节流直接输出到浏览器

数据库中blob字段存储的图片,通过Controller输出到浏览器客户端并显示出来。

实现方式:SpringMVC,关键部分代码片段如下:

1,编写铺助类及函数 

package com.acc.sp.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.SQLException;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import oracle.sql.CLOB;
 /*
 * Author WangSl
 * Version 1.0
 * Aug 29, 2012 2:38:05 PM
 */
public class StringUtil {
	//数组转换成","分隔的连接数据
	public static String getFormItemValue(Object obj) {
		String ret = "";
		if (obj == null) {
			ret = "";
		} else if (obj instanceof String) {
			ret = obj.toString();
		} else if (obj instanceof String[]) {
			String arr[] = (String[]) obj;
			for (int i = 0; i < arr.length; i++) {
				ret += arr[i] + ",";
			}
			if (ret.endsWith(",")) {
				ret = ret.substring(0, ret.length() - 1);
			}
		}
		return ret;
	}
	//","分隔后的数据 添加单引号
	public static String getOneSysbolFormItemValue(Object obj) {
		String ret = "";
		String otRet = "";
		if (obj == null) {
			ret = "";
		} else if (obj instanceof String) {
			ret = obj.toString();
			if(ret.indexOf(",") > -1){
				String arr[] = ret.split(",");
				for (int i = 0; i < arr.length; i++) {
					otRet += "'"+arr[i] + "',";
				}
				ret = otRet;
			}
		} else if (obj instanceof String[]) {
			String arr[] = (String[]) obj;
			for (int i = 0; i < arr.length; i++) {
				ret += "'"+arr[i] + "',";
			}
			
		}
		if (ret.endsWith(",")) {
			ret = ret.substring(0, ret.length() - 1);
		}
		return ret;
	}
	//将Map中的Clob列数据转换成String,并返回String
	public String getClob2String(Map map, String column) {
		String str = "";
		Object clob = map.get(column);
		str = this.getClob2String(clob);
		return str;
	}
    
	//将Map中的Clob列数据转换成String,重新存入到Map中,并返回Map
	public Map getClob2StringInMap(Map map, String column) {
		String str = "";
		Object clob = map.get(column);
		str = this.getClob2String(clob);
		map.remove(column);
		map.put(column, str);
		return map;
	}
    
	//clob 转换 String (传入 clob 类型的 obj 当参数)
	public static String getClob2String(Object obj) {
		String str = "";
		try {
			CLOB clob = (CLOB) obj;
			if (clob == null || clob.length() == 0) {
				str = "";
			} else {
				long clen = clob.length();
				char clobArray[] = new char[(int) clen];
				int readednum = clob.getChars(1, (int) clen, clobArray);
				StringBuffer sb = new StringBuffer();
				sb.append(clobArray);
				str = sb.toString();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return str;
	}
	
	//  输出 blob  字段图片  (传入 blob 类型的 obj 当参数)
	 public static void outPutBlobImg(Object obj,HttpServletResponse response) {
		Blob imgBlob = null;
		OutputStream out=null;
		InputStream fis = null;
		try {
			imgBlob = (Blob)obj;
			if(obj==null || imgBlob.length()==0){		
				return ;
			}
			out = response.getOutputStream();
			fis = imgBlob.getBinaryStream();
			for (int b = fis.read(); b != -1; b = fis.read()) {
				out.write(b);
			}
		} catch (IOException e1) {
			e1.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				fis.close();
				out.flush();
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}		
		
	}
	 public static void main(String[] args) {
		System.out.println( getOneSysbolFormItemValue("a,"));
	}
}
2,显示图片的Controller对应的方法
// 显示图片信息
@RequestMapping(value = "/imgstrb64")
public void getImgBase64StrById(HttpServletRequest request, HttpServletResponse response) throws IOException {
	response.setContentType("text/text;charset=UTF-8");
	response.setHeader("Cache-Control", "no-cache");
	PrintWriter out =response.getWriter();		
	Map param = this.getParameter(request);
	List list = this.spJobService.findImgById(param);
	String imgStr = "";		
	if (null != list && !list.isEmpty()) {
		Iterator ite = list.iterator();
		if (ite.hasNext()) {
			Map map = (Map) ite.next();
			if (map != null && !map.isEmpty()) {
				if (map.get("IMG") != null) {
					imgStr = com.acc.sp.util.StringUtil.getClob2String(map.get("IMG"));						
				}
			}
		}
	}
    out.print(imgStr);
    out.flush();
    out.close();
}

3,输入imgstrb64访问路径测试


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
存储图片Oracle: ```c# using Oracle.DataAccess.Client; using System.Drawing; using System.IO; //连接Oracle数据库 string connString = "User Id=<username>;Password=<password>;Data Source=<datasource>"; OracleConnection conn = new OracleConnection(connString); conn.Open(); //将图片换为字节数组 Image image = Image.FromFile("<imagePath>"); MemoryStream ms = new MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] imageBytes = ms.ToArray(); //插入图片数据到Oracle string sql = "INSERT INTO <tableName> (image_column) VALUES (:imageParam)"; OracleCommand cmd = new OracleCommand(sql, conn); OracleParameter param = new OracleParameter(":imageParam", OracleDbType.Blob); param.Value = imageBytes; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); //关闭连接 conn.Close(); ``` 读取OracleBLOB字段图片并显示到PictureBox: ```c# using Oracle.DataAccess.Client; using System.Drawing; using System.IO; //连接Oracle数据库 string connString = "User Id=<username>;Password=<password>;Data Source=<datasource>"; OracleConnection conn = new OracleConnection(connString); conn.Open(); //查询图片数据 string sql = "SELECT image_column FROM <tableName> WHERE <condition>"; OracleCommand cmd = new OracleCommand(sql, conn); OracleDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { //从查询结果读取图片数据 byte[] imageBytes = (byte[])reader["image_column"]; //将字节数组换为Image对象 MemoryStream ms = new MemoryStream(imageBytes); Image image = Image.FromStream(ms); //将Image对象显示在PictureBox pictureBox1.Image = image; } //关闭连接 conn.Close(); ``` 其 `<username>`、`<password>`、`<datasource>`、`<tableName>`、`<condition>` 需要根据实际情况进行替换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值