java将字符串存入GridF并通过id或文件名查询

Wesley13
• 阅读 566
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.bson.codecs.configuration.CodecProvider;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.types.ObjectId;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
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;


public class Test {
    private MongoDatabase database = null;
    public static void main(String[] args) throws Exception {
        Test t=new Test();
        String ID = t.insertMedicalFile("测试一下1.txt", "fjkasdhfkjhdaslfhklahflasdhlhflk");
        String selectMedicalFileByObjectId = t.selectMedicalFileByObjectId("5c91ec501a551431b07eff28");
        String selectMedicalFileByFileName = t.selectMedicalFileByFileName("测试一下1.txt");

    }
    
    /**
     * 向 IMAGE_FILE 中写入文件记录。
     * @param fileName  文件名
     * @param xmlContent   文件内容。
     * @throws Exception
     */
    public String  insertMedicalFile(String fileName , String xmlContent) throws Exception{
        MongoDatabase mds = null;
        mds = getMdbOperator();
        InputStream inputStream = new ByteArrayInputStream(xmlContent.getBytes("UTF-8"));
        //业务逻辑模式
        GridFSBucket gridFSBucket = GridFSBuckets.create(mds,"IMAGE_FILE");
        ObjectId objectId = gridFSBucket.uploadFromStream(fileName, inputStream);
        System.out.println("HUC 生成的 objectId  = " + objectId);
        
        inputStream.close();
        
        return objectId+"" ;
    }
    /**
     * 根据文件id返回文件内容
     * @param objectId
     * @return
     */
    public String selectMedicalFileByObjectId(String objectId){
        String result = "" ;
        try {
            MongoDatabase mds = null;
            mds = getMdbOperator();
            GridFSBucket gridFSBucket = GridFSBuckets.create(mds,"IMAGE_FILE");
            
            ByteArrayOutputStream baos = new ByteArrayOutputStream();   
            gridFSBucket.downloadToStream(new ObjectId(objectId), baos);
            
            result =  baos.toString("UTF-8");
            
        } catch (Exception e) {
            result = "" ; //此处可能会报异常错误,异常错误的原因是 上面 downloadToStream 为空。
            e.printStackTrace();
        }
        return result ; 
    }
    /**
     * 根据文件名返回文件内容
     * @param fileName
     * @return
     */
    public String selectMedicalFileByFileName(String fileName){
        String result = "" ;
        try {
            MongoDatabase mds = null;
            mds = getMdbOperator();
            GridFSBucket gridFSBucket = GridFSBuckets.create(mds,"IMAGE_FILE");
            
            ByteArrayOutputStream baos = new ByteArrayOutputStream();   
            gridFSBucket.downloadToStream(fileName, baos);
            
            result =  baos.toString("UTF-8");
            
        } catch (Exception e) {
            result = "" ; //此处可能会报异常错误,异常错误的原因是 上面 downloadToStream 为空。
            e.printStackTrace();
        }
        return result ; 
    }
    /**
     * 获得链接
     * 
     * @return
     */
    public MongoDatabase getMdbOperator() {
        try {
            MongoClient mongoClient = getMongoClient();
            if (mongoClient != null) {
                CodecProvider pojoCodecProvider = PojoCodecProvider.builder()
                        .automatic(true).build();
                CodecRegistry pojoCodecRegistry = fromRegistries(
                        MongoClient.getDefaultCodecRegistry(),
                        fromProviders(pojoCodecProvider));
                database = mongoClient.getDatabase("HUC")
                        .withCodecRegistry(pojoCodecRegistry);
                return database;
            } else {
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    

    private static MongoClient getMongoClient() throws Exception {
        MongoClientOptions.Builder build = new MongoClientOptions.Builder();
        // 与目标数据库能够建立的最大connection数量为200,当连接池被用光时,会被阻塞住
        build.connectionsPerHost(200);
        // 如果当前所有的connection都在使用中,则每个connection上可以有100个线程排队等待
        build.threadsAllowedToBlockForConnectionMultiplier(100);
        /*
         * 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
         * 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception
         * 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败
         */
        build.maxWaitTime(1000 * 60 * 2); // 这个就是Server Selection
                                            // Timeout?
        build.connectTimeout(1000 * 60 * 1); // 与数据库建立连接的timeout设置为1分钟
        build.socketTimeout(10 * 1000); // 发送请求和接收请求的超时时间
        MongoClientOptions myOptions = build.build();
        // 创建链接
        MongoCredential credential = MongoCredential.createCredential(
                "admin", "HUC", "123456".toCharArray());
        List addresses = new ArrayList();
        //mongoDB集群地址
        addresses.add(new ServerAddress("192.168.220.130", 27017));
        addresses.add(new ServerAddress("192.168.220.128", 27017));
        addresses.add(new ServerAddress("192.168.220.129", 27017));
        return new MongoClient(addresses,credential,myOptions);
    }

}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这