java操作MongoDB:使用GridFS对文件进行操作

使用mongbd保存图片,文件等效率要比存在oracle等关系型数据库要好,这是大家公认的,。。。。

好了,废话不多说,直接上代码


package com.aspirecn.hzyl.base.utils;


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


import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.MongoOptions;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;


public class MongoDbUtils {
/**
* 地址
*/
private static String ipAddr = null;
/**
* 端口
*/
private static int port = 27017;
/**
*用户名 
*/
private static String userName = null;
/**
* 密码
*/
private static String passwd = null;
/**
* 连接池大小
*/
private static int poolSize = 50;
private static int blockSize = 50;
public static Mongo mongo = null;
/**
* 是否需要验证

* 当mongdb设置权限的时候需要验证,否则默认不需要
*/
private static boolean authFlag = false;


public MongoDbUtils(String ipAddr, String port, String userName,
String passwd, String poolSize, String blockSize) {
MongoDbUtils.ipAddr = ipAddr;
MongoDbUtils.passwd = passwd;
MongoDbUtils.userName = userName;
if (CommonUtils.isNotBlank(port)) {
MongoDbUtils.port = Integer.valueOf(port);
}
if (CommonUtils.isNotBlank(blockSize)) {
MongoDbUtils.blockSize = Integer.valueOf(blockSize);
}
if (CommonUtils.isNotBlank(poolSize)) {
MongoDbUtils.poolSize = Integer.valueOf(poolSize);
}


}
    /**
     * 获取Mongo
     * @return
     * @throws UnknownHostException
     * @throws MongoException
     */
public static Mongo getMongoDb() throws UnknownHostException,
MongoException {
if (mongo == null) {
init();
}
return mongo;
}

    /**
     * 首次初始化对象
     * @throws UnknownHostException
     * @throws MongoException
     */
public static void init() throws UnknownHostException, MongoException {
mongo = new Mongo(ipAddr, port);
MongoOptions opt = mongo.getMongoOptions();
opt.connectionsPerHost = poolSize;
opt.autoConnectRetry = true;
opt.threadsAllowedToBlockForConnectionMultiplier = blockSize;
}


/**
* 保存文件到MongoDB服务器

* @param file
*            文件
* @param db
*            数据库名
* @param bucket
*            文件集名
* @param fileName
*            文件名
* @return
* @throws MongoException
* @throws IOException
* @throws Exception
*/
public static boolean saveFileToMongo(File file, String db, String bucket,
String fileName) throws MongoException, IOException {
try {
//1.获取连接,相当于jdbc连接oracle时的
Mongo mongo = MongoDbUtils.getMongoDb();
//2.根据数据库名连接到数据库
DB mongoDb = mongo.getDB(db);
//3.认证权限
if (!authFlag) {
authFlag = mongoDb.authenticate(MongoDbUtils.userName,
MongoDbUtils.passwd.toCharArray());
}

GridFS myFS = new GridFS(mongoDb, bucket);
GridFSInputFile inputFile = myFS.createFile(file);
inputFile.setFilename(fileName);
inputFile.save();
} catch (IOException ex) {
mongo = null;
throw ex;
}
return true;
}

/**
* 从MongoDB服务器删除文件

* @param db
*            数据库名
* @param bucket
*            文件集名
* @param fileName
*            文件名
* @return
* @throws MongoException
* @throws IOException
* @throws Exception
*/
public static boolean deleteFileFromMongo(String db, String bucket,
String fileName) throws UnknownHostException, MongoException {
Mongo mongo = MongoDbUtils.getMongoDb();
DB mongoDb = mongo.getDB(db);
if (!authFlag) {
authFlag = mongoDb.authenticate(MongoDbUtils.userName,
MongoDbUtils.passwd.toCharArray());
}
GridFS myFS = new GridFS(mongoDb, bucket);
myFS.remove(fileName);
return true;
}


/**
* 从MONGODB数据库中读取文件

* @param db
* @param bucket
* @param fileName
* @return
* @throws UnknownHostException
* @throws MongoException
*/
public static InputStream getFileFromMongo(String db, String bucket,
String fileName) throws UnknownHostException, MongoException {
Mongo mongo = MongoDbUtils.getMongoDb();
DB mongoDb = mongo.getDB(db);
if (!authFlag) {
authFlag = mongoDb.authenticate(MongoDbUtils.userName,
MongoDbUtils.passwd.toCharArray());
}
GridFS myFS = new GridFS(mongoDb, bucket);
GridFSDBFile imageForOutput = myFS.findOne(fileName);
InputStream input = null;
if (imageForOutput != null) {
input = imageForOutput.getInputStream();
}
return input;


}
    /**
     * 从MongoDB读取文件
     * @param db
     * @param bucket
     * @param fileName
     * @return
     * @throws UnknownHostException
     * @throws MongoException
     */
public static GridFSDBFile getDBFileFromMongo(String db, String bucket,
String fileName) throws UnknownHostException, MongoException {
Mongo mongo = MongoDbUtils.getMongoDb();
DB mongoDb = mongo.getDB(db);
if (!authFlag) {
authFlag = mongoDb.authenticate(MongoDbUtils.userName,
MongoDbUtils.passwd.toCharArray());
}
GridFS myFS = new GridFS(mongoDb, bucket);
GridFSDBFile imageForOutput = myFS.findOne(fileName);
return imageForOutput;
}


/**
* 上传文件到MongoDB服务器上 如果该文件key已存在,先删除该key对应的文件,再添加

* @param data
*            文件字节
* @param db
*            数据库名
* @param bucket
*            文件集名
* @param fileName
*            文件名
* @return
* @throws MongoException
* @throws IOException
* @throws Exception
*/
public static boolean uploadFileToMongo(File file, String db,
String bucket, String fileName) throws MongoException, IOException {
try {
Mongo mongo = MongoDbUtils.getMongoDb();
DB mongoDb = mongo.getDB(db);
if (!authFlag) {
authFlag = mongoDb.authenticate(MongoDbUtils.userName,
MongoDbUtils.passwd.toCharArray());
}
GridFS myFS = new GridFS(mongoDb, bucket);
GridFSDBFile imageForOutput = myFS.findOne(fileName);
if (imageForOutput != null) {
myFS.remove(fileName);
}
GridFSInputFile inputFile = myFS.createFile(file);
inputFile.setFilename(fileName);
inputFile.save();
} catch (IOException ex) {
mongo = null;
throw ex;
}
return true;
}


/**
* 上传文件到MongoDB服务器上 如果该文件key已存在,先删除该key对应的文件,再添加

* @param file
*            文件
* @param db
*            数据库名
* @param bucket
*            文件集名
* @param fileName
*            文件名
* @return
* @throws MongoException
* @throws IOException
* @throws Exception
*/
public static boolean uploadFileToMongo(byte[] data, String db,
String bucket, String fileName) throws MongoException, IOException {
try {
Mongo mongo = MongoDbUtils.getMongoDb();
DB mongoDb = mongo.getDB(db);
if (!authFlag) {
authFlag = mongoDb.authenticate(MongoDbUtils.userName,
MongoDbUtils.passwd.toCharArray());
}
GridFS myFS = new GridFS(mongoDb, bucket);
GridFSDBFile imageForOutput = myFS.findOne(fileName);
if (imageForOutput != null) {
myFS.remove(fileName);
}
GridFSInputFile inputFile = myFS.createFile(data);
inputFile.setFilename(fileName);
inputFile.save();
} catch (IOException ex) {
mongo = null;
throw ex;
}
return true;
}
/**
* 上传文件到MongoDB服务器上 如果该文件key已存在,先删除该key对应的文件,再添加

* @param file
*            文件
* @param db
*            数据库名
* @param bucket
*            文件集名
* @param fileName
*            文件名
* @return
* @throws MongoException
* @throws IOException
* @throws Exception
*/
public static boolean uploadFileToMongo(InputStream input, String db,
String bucket, String fileName) throws MongoException, IOException {
try {
Mongo mongo = MongoDbUtils.getMongoDb();
DB mongoDb = mongo.getDB(db);
if (!authFlag) {
authFlag = mongoDb.authenticate(MongoDbUtils.userName,
MongoDbUtils.passwd.toCharArray());
}
GridFS myFS = new GridFS(mongoDb, bucket);
GridFSDBFile imageForOutput = myFS.findOne(fileName);
if (imageForOutput != null) {
myFS.remove(fileName);
}
GridFSInputFile inputFile = myFS.createFile(input);
inputFile.setFilename(fileName);
inputFile.save();
} catch (IOException ex) {
mongo = null;
throw ex;
}
return true;
}

}

你可能感兴趣的:(MongoDB)