冰镇可乐 发表于 2017-12-15 12:34:04

【MongoDB】6.关于MongoDB存储文件的 命令执行+代码执行

package com.mongo.util;  

  

  
import java.io.File;
  
import java.io.FileOutputStream;
  
import java.util.ArrayList;
  
import java.util.List;
  
import org.bson.conversions.Bson;
  
import com.mongodb.BasicDBObject;
  
import com.mongodb.MongoClient;
  
import com.mongodb.MongoCredential;
  
import com.mongodb.ServerAddress;
  
import com.mongodb.client.MongoDatabase;
  
import com.mongodb.client.gridfs.GridFSBucket;
  
import com.mongodb.client.gridfs.GridFSBuckets;
  
import com.mongodb.client.gridfs.GridFSFindIterable;
  
import com.mongodb.client.gridfs.model.GridFSDownloadByNameOptions;
  
import com.mongodb.client.gridfs.model.GridFSFile;
  

  
/**
  
*
  
* @author AGEN
  
*
  
*/

  
public>  
      public static void main(String[] args) {
  
          try {
  
            //localhost:mongodb服务器的地址, 27017:mongodb服务器的端口
  
            ServerAddress serverAddress = new ServerAddress("localhost", 27017);
  
            List<ServerAddress> addrs = new ArrayList<ServerAddress>();
  
            addrs.add(serverAddress);
  
            //第一个参数report:用户名,第二个参数report:数据库名,第三个参数"sa".toCharArray():密码
  
            MongoCredential credential = MongoCredential.createScramSha1Credential("report", "report", "sa".toCharArray());
  
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();
  
            credentials.add(credential);
  
               
  
            //通过连接认证获取MongoDB连接
  
            MongoClient mongoClient = new MongoClient(addrs, credentials);
  
               
  
            //连接到数据库
  
            MongoDatabase mongoDatabase = mongoClient.getDatabase("report");
  
            
  
            //创建文件存取通道
  
            GridFSBucket gsb = GridFSBuckets.create(mongoDatabase);
  
            
  
            //向mongodb里面写入文件
  
//             File file = new File("F:\\500226199001096256.jpg");
  
//             FileInputStream fis = new FileInputStream(file);

  
//             ObjectId>  
            
  
            //按Id查找文件,并保存到指定地方
  
            //注意,下面ID为fs.files的id, 非fs.chunks的id
  
            //如果不行,我就不知道了,你解决后跟我说一下,让我长长见识!thank you
  
            FileOutputStream fos = new FileOutputStream(new File("D:\\aaaa.jpg"));
  
//             gsb.downloadToStream(new ObjectId("57178cd65eeb4f1f5c2cbaf1"), fos);
  
            
  
            //对于你那个uuid是36位的,可以这样构建条件来查询将下列md5换成你的_id,对应的值换成像的36位uuid即可
  
            Bson bson = new BasicDBObject("md5", "4d08209a90345ec9ebb0baf99dd218a1");
  
            GridFSFindIterable gsfi = gsb.find(bson);
  
            //因为你的_id是用uuid来表示的,是唯一的,所以应该可以也只能查出一条记录,在此就直接取第一条,否则应该再筛选
  
            GridFSFile gfsf = gsfi.first();
  
            //按文件名来取得此文件,第三个参数直接创建,表示取此文件的最新版本,如果需要取较旧的版本,则new GridFSDownloadByNameOptions().revision(0)
  
            //其中0为版本号,表示如下
  
//            0 = the original stored file
  
//            1 = the first revision
  
//            2 = the second revision
  
//            etc..
  
//            -2 = the second most recent revision
  
//            -1 = the most recent revision
  
            gsb.downloadToStreamByName(gfsf.getFilename(), fos, new GridFSDownloadByNameOptions());
  
            System.out.println(gfsf.getFilename() + "---" + gfsf.getObjectId() + "---" + gfsf.getId());
  
          } catch (Exception e) {//57178cd65eeb4f1f5c2cbaf2
  
            System.err.println(e.getClass().getName() + ":" + e.getMessage());
  
          }
  
   }
  
}
页: [1]
查看完整版本: 【MongoDB】6.关于MongoDB存储文件的 命令执行+代码执行