MongoDB对图片进行CRUD操作――与JAVA结合(一)

2015-07-24 07:00:42 · 作者: · 浏览: 1

上几篇博客简单对MongoDB进行了简单介绍和如何安装,以及在dos下是如何操作MongoDB和在安装MongoDB中,出现了什么错误,是如何解决的。当然这些都还不够,我们还要用到实际当中去。我用MyEclipse+JDK1.7做了一个简单的demo,来展示下MongoDB怎么运用到实际中去。

MongoDB作为一个NoSql数据库的代表,存取多媒体数据,应该是强项吧?那么,在MongoDB中是如何对图片进行CRUD操作的。

上几篇博客中已经提到,MongoDB的文档结构是BSON格式,BSON格式本身支持保存二进制格式的数据,所以可以把文件的二进制格式的数据直接保存到MongoDB的文档结构中。但是一个BSON的最大长度不能超过4M,所以限制了单个文档中能存入的最大文件不能超过4M。为了解决这个问题,MongoDB提供了“GridFS”方式,“GridFS”方式对文件操作需要引入相关jar包——mongo-java-driver-2.9.3.jar。

不多说,看实例:

?

package com.zd.mongodb.common;

import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;

public class MongoDBCommon {

	// 连接mongodb
	public DB MongoDbConnection() {
		Mongo m = null;
		try {
			m = new Mongo("localhost", 27017);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		DB db = m.getDB("test");
		return db;
	}

	// 保存图片信息
	public void saveFile(String connection, String id, String file) {
		DB db = MongoDbConnection();  //获取MongoDB的数据库
		File imageFile = new File(file);
		GridFS gfsPhoto = new GridFS(db, connection); //connection为集合名词
		GridFSInputFile gfsFile = null;
		try {
			gfsFile = gfsPhoto.createFile(imageFile);
		} catch (IOException e) {
			e.printStackTrace();
		}
		gfsFile.setId(id);
		gfsFile.setContentType("image/jpeg");
		gfsFile.save();

	}

	// 读取文件
	public void readFile(String connection, String fileName) {
		DB db = MongoDbConnection();  //获取连接
		DBCollection collection = db.getCollection(connection);  //connection为集合名称
		String newFileName = fileName;
		GridFS gfsPhoto = new GridFS(db, connection);
		GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);
		System.out.println(imageForOutput);  //返回数据以BSON格式体现
	}

	//根据id查询相应文件
	public void findByObjectId(String connection, String id) {
		DB db = MongoDbConnection();
		DBCollection collection = db.getCollection(connection);
		DBObject dbObj = collection.findOne(id);
		System.out.println(dbObj);  //返回数据以BSON格式体现

	}

	// 删除文件
	public void deleteFile(String connection,String id) {
		DB db = MongoDbConnection();
		DBCollection collection = db.getCollection(connection);
		DBObject o=collection.findOne(id);
		collection.remove(o);
	}

}

客户端:

?

package com.zd.mongodb.common;

public class ZhudanTest {
	
	 public static void main(String[] args) throws Exception {
		 MongoDBCommon dbCommon=new MongoDBCommon();
		 String newFileName="zhudan.jpg";
	     String imageFile="D:/生活/照片/me/zhudan.jpg";
//	     String connection="photo.files";
	     String connection="photo";
	     
	     //根据id保存数据
	     String id="1111";
	     dbCommon.saveFile( connection, id, imageFile);
	     
	     //根据名称获取数据
//		 dbCommon.readFile(connection, newFileName);
	     
	     //根据id删除数据
//	     String id="1111";
//	     dbCommon.deleteFile(connection,id);
		 
	     //根据id查询数据
//		 String id="1111";
//		 dbCommon.findByObjectId(connection, id);
		 
	 }
}


?

\

再分析下原理:

?

创建photo时,驱动首先会在当前数据库创建两个集合:一个是"photo.files"集合,另一