图片保存到数据库blob字段
2017-08-08 14:54
375 查看
前言
目前个人总结图片保存有三种方式:1.大型有关图片的项目一般都是保存到一个第三方的云服务器上,数据库保存图片的地址就可以了。
2.也可以将图片上传到自己项目所在的服务器上,数据库保存图片的地址就可以了。
3.第三种就是将图片保存到数据库的blob字段里。
今天主要说第三种方式。
图片保存
dao层代码如下:public void doSave(Map<String, Object> parasMap) throws Exception { StringBuffer sql = new StringBuffer(); Connection conn = null; PreparedStatement pst = null; try{ conn = this.getConnection(); sql.append("insert into picture_t "); sql.append("(id,name,picture) "); sql.append("values(picture_s.nextval,'"+parasMap.get("name")+"',?) "); pst = conn.prepareStatement(sql.toString()); File file = new File(parasMap.get("src")); FileInputStream fStream = new FileInputStream(file); pst.setBinaryStream(1, fStream, (int) file.length()); pst.execute(); }catch(Exception e){ System.out.pring(e); }finally{ close(pst,conn); } }
上边的代码中可以看到,参数parasMap中包含图片的路径(parasMap.get(“src”)),将图片路径利用文件输入流读取图片保存到数据库中,数据库中picture字段就是blob类型。
图片读取展现到页面
dao层代码正常写,从数据库select图片所在的blob字段,用rs.getBlob(“picture”)获取并保存到Map中然后添加到list中即可。action中接收到该list后做如下处理:
public void queryImg(HttpServletRequest request, HttpServletResponse response) throws Exception{ String id = request.getParameter("id"); String imgIndex = request.getParameter("imgIndex"); List<Map<String,Object>> list = bo.queryImgById(id); Blob blob=(Blob) list.get( Integer.parseInt(imgIndex)).get("picture"); int length = (int) blob.length(); byte[] bImage = new byte[length]; InputStream is = new BufferedInputStream(blob.getBinaryStream()); is.read(bImage, 0, length); OutputStream out = response.getOutputStream(); out.write(bImage); out.flush(); out.close(); 4000 is.close(); }
上边的代码中可以看出将图片从list里取出来后强转为Blob类型,这个类型是java自带的类。
页面的img标签的src要请求到这个方法中,如下:
<img src="/picture.do?method=queryImg&id=1&imgIndex=2">
注意事项
以上方法就可以将图片保存到数据库并回显到页面上。难点在于如何同时处理多张图片。对于保存来说就是写个循环保存即可,而对于回显来说,就要先写一个方法,查询一共有多少张图片回显,比如有3张图片,那么在页面上就要有三个<img src="/picture.do?method=queryImg&id=1&imgIndex=2">
每个img标签的不同之处在于向后端传的参数imgIndex,分别为0、1、2,
这样就可以同时回显3张图片了。
相关文章推荐
- c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库
- 插入图片到数据库(BLOB大字段保存对象)
- java保存blob字段到数据库
- 将网络中的图片存为NSData并保存到sqlite的BLOB字段中
- c# winform 读取oracle中blob字段的图片并且显示到pictureBox里,保存进库
- 在oracle 数据库中使用 Blob 字段存储 一张图片并读取
- 将网络中的图片存为NSData并保存到sqlite的BLOB字段中.
- 谈谈有关各数据库Blob、Clob类型字段的读取、保存更新
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(1)
- 数据库中的BLOB字段--存图片等文件
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)
- 从数据库中读取blob字段并生成图片文件
- 查找数据库里的blob字段并保存在文件中
- 将网络中的图片存为NSData并保存到sqlite的BLOB字段中
- Kettle 生成的XML格式数据保存到Oracle 数据库的BLOB类型字段中
- Kettle 生成的XML格式数据保存到Oracle 数据库的BLOB类型字段中
- 将以Blob类型存在数据库的图片保存在本地
- 基于struct2实现保存图片到mysql的blob字段和显示
- 如何直接下载保存在Oracl数据库中Blob字段的文件(不生成临时文件)???
- 用C#将图片保存至Oracle BLOB字段中的方法