mongodb基础系列——java操作mongodb实现图片文件功能

来源:互联网 发布:电脑软件连不上网络 编辑:程序博客网 时间:2024/04/19 02:51
mongodb支持多种语言,并且提供了多种语言的驱动。
    
  
   前提:下载相应的驱动:官网上下载:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
  本人使用mongo-2.10.1.jar版本:

   mongodb操作文件,主要是通过GridFS类。存储文件主要存放在fs中了,其中的fs是数据库默认的。
  
   
   并且GridFS是直接与数据库打交道,与collection集合无关。
   具体的操作如下:其中有相应的注释:
  
[html] view plain copy
 print?
  1.    package com.mongo.dao;  
  2.   
  3. import java.io.File;  
  4. import java.util.List;  
  5.   
  6. import com.mongodb.BasicDBObject;  
  7. import com.mongodb.DB;  
  8. import com.mongodb.DBObject;  
  9. import com.mongodb.Mongo;  
  10. import com.mongodb.gridfs.GridFS;  
  11. import com.mongodb.gridfs.GridFSDBFile;  
  12. import com.mongodb.gridfs.GridFSInputFile;  
  13.   
  14. /**  
  15. * 使用mongodb对文件的读取操作  
  16. * @author lhy  
  17. *  
  18. */  
  19. public class GridFSTest {  
  20.       
  21.      public static void main(String[] args) throws Exception {  
  22.           //saveFile();  
  23.           readFile();  
  24.      }  
  25.       
  26.      /**  
  27.      * 存储文件  
  28.      */  
  29.      public static void saveFile() throws Exception{  
  30.            
  31.           //连接服务器  
  32.           Mongo mongo=new Mongo();  
  33.           //连接数据库  
  34.           DB db=mongo.getDB("testGridFS");  
  35.            
  36.           //文件操作是在DB的基础上实现的,与表和文档没有关系  
  37.           GridFS gridFS=null;  
  38.           gridFS=new GridFS(db);  
  39.            
  40.           String fileName="vltest.log";  
  41.           File readFile=new File("d:/"+fileName);  
  42.            
  43.           GridFSInputFile  mongofile=gridFS.createFile(readFile);  
  44.         //可以再添加属性  
  45.           mongofile.put("path","d:/"+fileName);  
  46.           //保存  
  47.           mongofile.save();    
  48.           或者用byte[]保存图片
  49.           byte[]tempbytes;
  50.           ..........
  51.           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();               
  52.      }  
  53.       
  54.      /**  
  55.      * 读文件,读到磁盘上  
  56.      * @throws Exception  
  57.      */  
  58.      public static void readFile() throws Exception{  
  59.           //链接服务器  
  60.           Mongo mongo=new Mongo();  
  61.           //连接数据库  
  62.           DB db=mongo.getDB("testGridFS");  
  63.           GridFS gridFs=null;  
  64.           gridFs=new GridFS(db);  
  65.            
  66.           //查找条件  
  67.           DBObject query=new BasicDBObject();  
  68.         //查询的结果:  
  69.           List<GridFSDBFile> listfiles=gridFs.find(query);  
  70.         GridFSDBFile gridDBFile=listfiles.get(0);  
  71.          
  72.         //获得其中的文件名  
  73.         //注意 : 不是fs中的表的列名,而是根据调试gridDBFile中的属性而来  
  74.         String fileName=(String)gridDBFile.get("filename");  
  75.          
  76.         System.out.println("从Mongodb获得文件名为:"+fileName);  
  77.           
  78.         File writeFile=new File("d:/"+fileName);  
  79.         if(!writeFile.exists()){  
  80.              writeFile.createNewFile();  
  81.           }  
  82.          
  83.         //把数据写入磁盘中  
  84.         //查看相应的提示  
  85.         gridDBFile.writeTo("d:/a.txt");  
  86.         //写入文件中  
  87.         gridDBFile.writeTo(writeFile);    
  88.         或者
  89.        ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); 
  90.         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();  
  91.             File file=new File("E:\\cc\\44.jpg");
        FileOutputStream out=new FileOutputStream(file);
        out.write(in_b);           
  92.          }  
  93. }  
    其中图片也是这么存储的,把图片当作文件来存储。
    运行上述存储结果如下:






0 0
原创粉丝点击