作者:潇湘V烟雨 | 来源:互联网 | 2014-05-28 16:53
2012111302:36PM636次查看GridFS是一种在MongoDB中存储大二进制文件的机制。它默认使用fs.chunks和fs.files来存储文件。其中fs.files集合存放文件的信息,fs.chunks存放文件数据。下面的方法返回一个GridFSDBFile的集合publicListDBObjectli
2012 11 13 02:36 PM 636次查看
GridFS是一种在MongoDB中存储大二进制文件的机制。它默认使用fs.chunks和fs.files来存储文件。其中fs.files集合存放文件的信息,fs.chunks存放文件数据。
下面的方法返回一个GridFSDBFile的集合
public List
listGirdFS() {
DB db = getMongoTemplate().getDb();
GridFS gridFS = new GridFS(db);
try{
DBCursor cursor = gridFS.getFileList();
return cursor.toArray();
}
catch (Exception e){
logger.error(e.getMessage());
}
return null;
}
如果你直接进行一下操作的话,程序将会抛出一个"no gridfs!"的运行时异常。
public void migration() {
for (DBObject object : listGirdFS()) {
GridFSDBFile file = (GridFSDBFile)object;
file.writeTo(new File(file.getFileName()));
}
}
这是因为文件的信息存放在fs.files上,文件数据存放在fs.chunks上。批量查找数据的时候只是返回文件的信息,这样能够减轻程序的压力。
因此正确的做法是
public void migration() {
for (DBObject object : listGirdFS()) {
String fileName = ((GridFSDBFile)object).getFilename();
GridFSDBFile file = findGridFSByName(fileName);
file.writeTo(new File(file.getFileName()));
}
}
其中findGridFSByName(fileName)方法定义如下:
public GridFSDBFile findGridFSByName(String fileName) {
DB db = getMongoTemplate().getDb();
GridFS gridFS = new GridFS(db);
try{
GridFSDBFile gridFSDBFile = gridFS.findOne(fileName);
return gridFSDBFile;
}
catch (Exception e){
logger.error(e.getMessage());
}
return null;
}