基于MongoDB GridFS取二进制数据转换为图片在jsp页面显示
2017-03-10 10:00
671 查看
1.GridFS简介
GridFS是mongodb中用户存储大对象的工具,对于mongodb,BSON格式的数据(文档)存储有尺寸限制,最大为16M.但是在实际系统开发中,经常会有上传图片或者文件的功能,这些文件可能尺寸会很大,我们可以借用Gridfs来辅助实现这些文件的管理.GridFS会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为mongodb的一个文档(document)被存储在chunks集合中。gridfs模块会为每个文件创建chunks和files信息.每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中.files集合中的文档就是BSON格式,可以使用mongodb的索引等等特性,当然可以对files文档做数据分析。
fs.files集合存放文件的信息,一个fs.files集合中的一条记录内容如下,即一个file的信息如下:
对应的fs.chunks中的chunk如下:
"fs.files"怎么知道它对应的文件二进制数据在哪些块呢?那是因为在"fs.chunks"中有个"files_id"键,它对应"fs.files"的"_id"。"fs.chunks"还有一个键(int型)"n",它表明这些块的先后顺序。这两个集合名中的"fs"也是可以通过参数自定义的。
2.项目实现代码
jsp页面代码
java后台代码
GridFS是mongodb中用户存储大对象的工具,对于mongodb,BSON格式的数据(文档)存储有尺寸限制,最大为16M.但是在实际系统开发中,经常会有上传图片或者文件的功能,这些文件可能尺寸会很大,我们可以借用Gridfs来辅助实现这些文件的管理.GridFS会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为mongodb的一个文档(document)被存储在chunks集合中。gridfs模块会为每个文件创建chunks和files信息.每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中.files集合中的文档就是BSON格式,可以使用mongodb的索引等等特性,当然可以对files文档做数据分析。
fs.files集合存放文件的信息,一个fs.files集合中的一条记录内容如下,即一个file的信息如下:
对应的fs.chunks中的chunk如下:
"fs.files"怎么知道它对应的文件二进制数据在哪些块呢?那是因为在"fs.chunks"中有个"files_id"键,它对应"fs.files"的"_id"。"fs.chunks"还有一个键(int型)"n",它表明这些块的先后顺序。这两个集合名中的"fs"也是可以通过参数自定义的。
2.项目实现代码
jsp页面代码
<img id="Imgbox" src="${pageContext.request.contextPath}/img_detail?id=${evidence.id}" height="530px" width="700px" style="margin:8px auto;">
java后台代码
@RequestMapping(value = "/img_detail", method = RequestMethod.GET) public void img_detail(HttpServletRequest request, HttpServletResponse response) throws UnknownHostException { try{ String id = request.getParameter("id"); Mongo mongo = new Mongo("IP地址", 端口号);//连接数据库 DB db = mongo.getDB("数据库名"); //如果collection为blog,mongodb就会去找blog.files与blog.chunks两个块,默认为fs GridFS gridFS = new GridFS(db,"collection名"); GridFSDBFile gridFSDBFile = (GridFSDBFile)gridFS.findOne(new ObjectId(id)); if (gridFSDBFile != null) { OutputStream sos = response.getOutputStream(); response.setContentType("application/octet-stream"); // 获取原文件名 String name = (String) gridFSDBFile.get("filename"); String fileName = new String(name.getBytes("GBK"), "ISO8859-1"); // 设置下载文件名 response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); // 向客户端输出文件 gridFSDBFile.writeTo(sos); sos.flush(); sos.close(); } }catch(Exception e){ e.printStackTrace(); } }
相关文章推荐
- 从二进制数据流获取图片数据,在页面中显示图片(MVC,NHibernate)
- JAVA读取MongoDB中的二进制图片并显示在页面上
- html上面通过websocket接收二进制图片数据并显示在页面上
- 取出数据库中BASE64编码后的图片二进制流数据显示在JSP页面上
- JAVA读取MongoDB中的二进制图片并在jsp中显示
- 将byte[]数组转换为图片,并在jsp页面进行显示
- JavaScript如何转换二进制数据显示成图片
- 如何在jsp页面中显示BLOB保存的图片数据
- 利用JSP在Web页面中显示随机数字验证码图片
- [转载]jsp页面显示数据导出到excel表中
- winform直接显示二进制数据中的图片
- 将SQL Server 2000数据库Image类型图片数据显示在页面上
- 从数据库提取数据通过jstl显示在jsp页面上
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- 基于JSP实现图片的数据库存储与显示
- jsp页面显示数据导出到excel表中
- 从数据库读出的JPG文件的字符流,转换成图片显示在页面上的相关代码
- 基于JSP实现图片的数据库存储与显示
- 从数据库中读取二进制数据,并显示图片
- 基于JSP实现数据库中图片的存储与显示