您的位置:首页 > 数据库 > Mongodb

mongodb基础系列——java操作mongodb实现图片文件功能

2016-04-02 19:43 896 查看
mongodb支持多种语言,并且提供了多种语言的驱动。

前提:下载相应的驱动:官网上下载:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
本人使用mongo-2.10.1.jar版本:

mongodb操作文件,主要是通过GridFS类。存储文件主要存放在fs中了,其中的fs是数据库默认的。



并且GridFS是直接与数据库打交道,与collection集合无关。
具体的操作如下:其中有相应的注释:

[html] view
plain copy

print?

package com.mongo.dao;

import java.io.File;

import java.util.List;

import com.mongodb.BasicDBObject;

import com.mongodb.DB;

import com.mongodb.DBObject;

import com.mongodb.Mongo;

import com.mongodb.gridfs.GridFS;

import com.mongodb.gridfs.GridFSDBFile;

import com.mongodb.gridfs.GridFSInputFile;

/**

* 使用mongodb对文件的读取操作

* @author lhy

*

*/

public class GridFSTest {

public static void main(String[] args) throws Exception {

//saveFile();

readFile();

}

/**

* 存储文件

*/

public static void saveFile() throws Exception{

//连接服务器

Mongo mongo=new Mongo();

//连接数据库

DB db=mongo.getDB("testGridFS");

//文件操作是在DB的基础上实现的,与表和文档没有关系

GridFS gridFS=null;

gridFS=new GridFS(db);

String fileName="vltest.log";

File readFile=new File("d:/"+fileName);

GridFSInputFile mongofile=gridFS.createFile(readFile);

//可以再添加属性

mongofile.put("path","d:/"+fileName);

//保存

mongofile.save();

或者用byte[]保存图片

byte[]tempbytes;

..........

InputStream inputImage = new ByteArrayInputStream(tempbytes);

GridFS gridFS=null;

gridFS=new GridFS(db1);

GridFSInputFile gridFSInputFile = gridFS.createFile(inputImage);

gridFSInputFile.setId("999");

gridFSInputFile.setFilename("java学习");

gridFSInputFile.save();

}

/**

* 读文件,读到磁盘上

* @throws Exception

*/

public static void readFile() throws Exception{

//链接服务器

Mongo mongo=new Mongo();

//连接数据库

DB db=mongo.getDB("testGridFS");

GridFS gridFs=null;

gridFs=new GridFS(db);

//查找条件

DBObject query=new BasicDBObject();

//查询的结果:

List<GridFSDBFile> listfiles=gridFs.find(query);

GridFSDBFile gridDBFile=listfiles.get(0);

//获得其中的文件名

//注意 : 不是fs中的表的列名,而是根据调试gridDBFile中的属性而来

String fileName=(String)gridDBFile.get("filename");

System.out.println("从Mongodb获得文件名为:"+fileName);

File writeFile=new File("d:/"+fileName);

if(!writeFile.exists()){

writeFile.createNewFile();

}

//把数据写入磁盘中

//查看相应的提示

gridDBFile.writeTo("d:/a.txt");

//写入文件中

gridDBFile.writeTo(writeFile);

或者

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();

GridFSDBFile gridFSDBFile = gridFS.findOne(query);

InputStream in=gridFSDBFile.getInputStream();

//InputStream转换为InputStreambyte[]

while ((rc = in.read(buff, 0, 100)) > 0) {

swapStream.write(buff, 0, rc);

}

byte[] in_b = swapStream.toByteArray();

File file=new File("E:\\cc\\44.jpg");

FileOutputStream out=new FileOutputStream(file);

out.write(in_b);

}

}

其中图片也是这么存储的,把图片当作文件来存储。
运行上述存储结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: