Mongodb gridfs保存大文件和大的对象

来源: 时间: 2016-01-07 12:02:06

MONGODB通过GridFS对象来对大对象进行保存。GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档。这将容许我们有效的保存大的文件对象,特别对于那些巨大的文件,比如视频。

代码:

public DB getDb() throws  Exception{

    Mongo mg = new Mongo("localhost", 27017);

    DB db = mg.getDB("test");

    return db;

}

public void saveFile(String collectionName, File file, String fileid, String companyid, String filename) {

    try {

        DB db = getDb();

        // 存储fs的根节点

        GridFS gridFS = new GridFS(db, collectionName);

        GridFSInputFile gfs = gridFS.createFile(file);

        gfs.put("aliases", companyid);

        gfs.put("filename", fileid);

        gfs.put("contentType", filename.substring(filename.lastIndexOf(".")));

        gfs.save();

    } catch (Exception e) {

        e.printStackTrace();

        System.out.println("存储文件时发生错误!!!");

    }

}

// 取出文件

public GridFSDBFile retrieveFileOne(String collectionName, String filename) {

    try {

        DB db = getDb();

        // 获取fs的根节点

        GridFS gridFS = new GridFS(db, collectionName);

        GridFSDBFile dbfile = gridFS.findOne(filename);

        if (dbfile != null) {

            return dbfile;

        }

    } catch (Exception e) {

        // TODO: handle exception

    }

    return null;

}

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

    TestSaveFile t = new TestSaveFile();

    File f = new File("D:/test/have/t100-n.bmp");

//    t.saveFile("files",f,"100","t100 test","t100.bmp");

    GridFSDBFile gridFSDBFile = t.retrieveFileOne("files", "100");

    File outFile = new File("f:/test" + gridFSDBFile.getContentType());

    InputStream inputStream =   gridFSDBFile.getInputStream();

    OutputStream outputStream = new FileOutputStream(outFile);

    int count = 0;

    byte b[] = new byte[8192];

    while ((count = inputStream.read(b)) != -1) {

        outputStream.write(b, 0, count);

    }

    inputStream.close();

    outputStream.close();

}

本页地址:http://www.easytd.com/shujuku/d_16010712316.html

常用工具