用JAVA怎样将保存在数据库BLOB类型的图片取出来转换为图片然后在页面展示啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JAVA怎样将保存在数据库BLOB类型的图片取出来转换为图片然后在页面展示啊相关的知识,希望对你有一定的参考价值。
如果要存数据库的话,数据库存图片字段用blob形式的(照片:zp为例)。
而且不能直接存,在存之前zp字段先插入一个empty.BLOB(),
然后select ZP from 表 for update。再用输入流的形式写进去。
// 先检索出来字段,必须使用oracle的类:oracle.sql.BLOB
oracle.sql.BLOB blob = null;
if (rs.next())
blob = (oracle.sql.BLOB) rs.getBlob("ZP");
// 到数据库的输出流
OutputStream outStream = blob.getBinaryOutputStream();
// 将输入流写到输出流
byte[] b = new byte[blob.getBufferSize()];
int len = 0;
while ((len = is.read(b)) != -1)
outStream.write(b, 0, len);
// blob.putBytes(1,b);
is.close();
outStream.flush();
outStream.close();
以上的回答,回答得不是很全,所以我没看明白 要返回的图片类型呢,在页面展示的具体代表应该怎样写呢 求指导啊
request.setCharacterEncoding("UTF-8");
response.setContentType("image/jpeg");
response.getOutputStream().write(bytes);
这几个参数是把这个图片直接发给浏览器,说白了就直接把图片当成文件让浏览器下载。
解决办法:
<img border=0 src="localhost:8080/Pic" />
localhost:8080是你配置WEB.XML
Pic是你的Servlet类名。 参考技术A 这时候图片数据已经存在Byte[] b里了, 剩下要做的就是把这数据写到response中去.
HttpServletResponse.getOutputStream.write(b)
最后不要忘了设置ContentType为图片类型,举例jpeg类型:
HttpServletResponse.setContentType("image/jpeg");追问
这些代码都是需要在JSP中写的?
追答不是jsp, 是servlet
追问啊 ? 我只有JAVA类,SQLMAP和JSP啊 我是打算在JAVA里处理好了,到时候往页面展示的时候直接传个参数就OK啦,这样不能实现吗?
追答你就建个servlet呗, jsp输出二进制我还没试过, 要看看jsp的out对象有没有输出byte数组的方法了, 有的话应该没问题.
jsp的out是没有写二进制的方法的了, 看来只能用servlet, 建个servlet, 然后在web.xml配置一下路径就成了, servlet还不是java类?
那页面接收的时候怎样接收啊
追答敲个网址就接收了啊..跟jsp一样
追问不是不是那个意思啦 我的意思是如果用HttpServletResponse,那么接收的时候request.getAttribute("") 但是我不晓得这个参数名称到底是哪个
request.setCharacterEncoding("UTF-8");
response.setContentType("image/jpeg");
response.getOutputStream().write(bytes);
我是这样传过去的 在前台接收流的形式是怎样的 参数是什么
Oracle中存储图片的类型为BLOB类型,Java中如何将其读取并转为字符串?
一,读取图片转为String类型: 需要使用Sun公司提供的Base64工具
String str = ((Map) list1.get(0)).get("EINVOICEFILE").toString(); //通过查询取出EINVOICEFILE的属性值,EINVOICEFILE在数据库中以(1:cat.png)这种varchar类型存储(公司平台需要可忽略)。
String[] filemap = str.split(":");
String id = filemap[0]; //分割字符串,拿到冒号前面的id,即 1
String sql_qr = "select content from hebfs.pt994 where id =?";
List list2 = DataBaseHelper.queryForList(sql_qr, new Object[] {id }); //content就是存储图片的blob数据,查询出放到list中。
String strBase64 = null;
byte[] bytes = (byte[])(((Map) list2.get(0)).get("CONTENT")); //这里先从list中取出图片,然后转换成字节数组。
strBase64 = new BASE64Encoder().encode(bytes); //最后调用base64的encode方法,把字节数组传进去就能得到需要的String数据。
System.out.println(strBase64);
二,如果数据库中的blob字段存储的是XML,读取方法如下:
String sql = " select EINVOICEXML from T_FSEITEMPLATE t where t.id = ? ";
List xml = DataBaseHelper.queryForList(sql, new Object[] { StringUtil.nullToEmpty(p.get("TEMPID"))}); //执行sql,结果存储于List中。
List resultlist = new ArrayList();
for (int i = 0; i <xml.size() ; i++) { //循环遍历xml集合
Map map = new HashMap();
map = (Map) xml.get(i);
byte[] bytes = (byte[]) map.get("EINVOICEXML"); //把每个值转为字节数组
String s = new String(bytes,"GBk"); //再转为String类型
map.put("EINVOICEXML",s); //使用Map封装。
resultlist.add(map); //将封装好的Map存储到list中。
}
以上是关于用JAVA怎样将保存在数据库BLOB类型的图片取出来转换为图片然后在页面展示啊的主要内容,如果未能解决你的问题,请参考以下文章
Oracle中存储图片的类型为BLOB类型,Java中如何将其读取并转为字符串?