从oracle中读取blob图片资源

xiaoxiao2021-02-28  67

1.对应图片资源这张表创建对应的实体类

Ibatisblob.java

private byte[] picresult; public byte[] getPicresult() { return picresult; } public void setPicresult(byte[] picresult) { this.picresult = picresult; }

2.Dao层中的Dao.java和对应的映射文件sqlmap.xml

Dao.java

public List pic(Map map) { return this.getSqlMapClientTemplate().queryForList("pic",map); }

sqlmap.xml

<sqlMap namespace="**" > <typeAlias alias="ibatisblob" type="cn.**.dao.IbatisBlob" /> <select id="pic" parameterClass="java.util.HashMap" resultClass="ibatisblob"> select pic from PICRESULT t where t.ispic = 1 and t.id = #id# and t.name= #name# </select>

3.service层处理

//获取查询 lllDao llis = (Dao) SpringBeansUtil.getBean("lllDao"); Map<String,String> map1 = new HashMap<String,String>(); //填写参数 map1.put("id", id); map1.put("name", name); //1.接收二进制的图片 List<IbatisBlob> imgResource = llis.pic(map1); String str1 = null; if(imgResource != null && imgResource.size()>0) { byte[] picresult = imgResource.get(0).getPicresult(); //加密运算之后 将byte[]转化为base64 byte[] encodeBase64 = Base64.encodeBase64(picresult); str1 = new String(encodeBase64); } //按照base64进行解密 byte[] decodeBase64 = Base64.decodeBase64(encodeBase64); byte2image(decodeBase64, "G:\\1\\2.jpeg");

图片与字节数组相互转换

//图片到byte数组 public byte[] image2byte(String path){ byte[] data = null; FileImageInputStream input = null; try { input = new FileImageInputStream(new File(path)); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int numBytesRead = 0; while ((numBytesRead = input.read(buf)) != -1) { output.write(buf, 0, numBytesRead); } data = output.toByteArray(); output.close(); input.close(); } catch (FileNotFoundException ex1) { ex1.printStackTrace(); } catch (IOException ex1) { ex1.printStackTrace(); } return data; } /////////////////////////////////// //byte数组到图片 public void byte2image(byte[] data,String path){ if(data.length<3||path.equals("")) return; try{ FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path)); imageOutput.write(data, 0, data.length); imageOutput.close(); System.out.println("Make Picture success,Please find image in " + path); } catch(Exception ex) { System.out.println("Exception: " + ex); ex.printStackTrace(); } } //byte数组到16进制字符串 public String byte2string(byte[] data){ if(data==null||data.length<=1) return "0x"; if(data.length>200000) return "0x"; StringBuffer sb = new StringBuffer(); int buf[] = new int[data.length]; //byte数组转化成十进制 for(int k=0;k<data.length;k++){ buf[k] = data[k]<0?(data[k]+256):(data[k]); } //十进制转化成十六进制 for(int k=0;k<buf.length;k++){ if(buf[k]<16) sb.append("0"+Integer.toHexString(buf[k])); else sb.append(Integer.toHexString(buf[k])); } return "0x"+sb.toString().toUpperCase(); }
转载请注明原文地址: https://www.6miu.com/read-80820.html

最新回复(0)