mongodb支持多种语言,并且提供了多种语言的驱动。
前提:下载相应的驱动:官网上下载:
http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
本人使用mongo-2.10.1.jar版本:
mongodb操作文件,主要是通过GridFS类。存储文件主要存放在fs中了,其中的fs是数据库默认的。
并且GridFS是直接与数据库打交道,与collection集合无关。
具体的操作如下:其中有相应的注释:
- 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); - }
- }
其中图片也是这么存储的,把图片当作文件来存储。
运行上述存储结果如下: