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);
} }

java将字符串存入GridF并通过id或文件名查询的更多相关文章

  1. java将字符串存入oracle的Blob中

    Blob内存放的是字节数组,需使用String的getBytes获得该字符串的字节数组(注意字符集编码),然后存入Blob. Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用 ...

  2. android112 jni 把java的字符串转换成c的字符串,数组处理

    package com.itheima.charencode; import android.os.Bundle; import android.app.Activity; import androi ...

  3. 基于easyui框架中input 类型的checkbox拼接成字符串存入数据库和读取选中---善良公社项目

    项目中我做修改用户个人资料的时候,有一个需求是帮助人员的帮助类型如图下所示: 当初想如果是asp.net控件的话应该很简单实现,如果不是基于easyUI框架那就太简单了,现在是受框架的限制与是前端ht ...

  4. Java对字符串加密并返回星号※

     If you don't look back, you'll never know I waiting for you behind you. Java对字符串加密并返回星号※ PasswordUt ...

  5. JAVA四则运算字符串解释器

    最近学习到后缀表达式,于是基于后缀表达式的思想,写了一个四则运算解释器,输入字符串类型的四则运算表达式,可以直接得到结果,支持括号嵌套. 实现时主要考虑以下两点: 字符串中运算符和数字分离 运算符优先 ...

  6. java 替换字符串模板(模板渲染)

    java渲染字符串模板,也就是说在java字符串模板中设置变量字符串,使用变量去渲染指定模板中设置好的变量字符串.下面介绍4种替换模板方式: 1.使用内置String.format String me ...

  7. Java 求字符串中出现频率最高字符

    前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下. import java.util.ArrayList; import java.util.Arrays; import ja ...

  8. Java中字符串为什么不以\0结尾

    Java中字符串为什么不以\0结尾 其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的 ...

  9. Java常量字符串String理解

    Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用  "eq ...

随机推荐

  1. Java的自动拆/装箱

    作者:Alvin 关键字:语法糖 类 对象 参考 Java 中的语法糖 语法糖--这一篇全了解 浅谈 Integer 类 什么是Java中的自动拆装箱 深入剖析Java中的装箱和拆箱 前言 我们知道, ...

  2. flask 实现异步非阻塞----gevent

    我们都知道,flask不支持异步非阻塞的请求,我们可以创建一个新项目去测试一下,推荐大家使用pycharm去开发我们的flask  使用特别的方便. rom flask import Flask im ...

  3. Mkdir方法

    新建目录或文件夹. 语法 MkDir 路径 所需的_路径_参数是一个字符串表达式,标识的目录或文件夹创建. _路径_可以包含驱动器. 如果未指定驱动器, MkDir当前的驱动器上创建新目录或文件夹. ...

  4. 正则表达式30min

    如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 ...

  5. Qt-网易云音乐界面实现-5 收藏列表,播放列表实现 QListWidget QTableWidget

    先上目前完成的内容吧,发现后面越写越多.在看看点击量,心凉凉. 完成了左侧的导航列表,还有就是右下角的播放列表. //创建的歌单 my_Create_Music_List = new QListWid ...

  6. Jmeter接口测试(十)测试报告

    这是jmeter接口测试系列的第十篇总结,也是最后一篇,之后会把接口集成的一些内容发一个系列,分享给大家,供大家一起学习进步. 批量执行完接口测试之后,我们需要查看测试报告,在之前单个接口调试我们是通 ...

  7. Jmeter接口测试(六)关联&正则匹配

    问题思考 接口测试过程中经常需要接口之间关联调用,比如获取上一个接口的返回值,作为另一个接口的请求参数,那么该如何从处理呢? 这里需要使用 Jmeter 的正则表达式提取器,通过对响应的数据来提取指定 ...

  8. Oracle中解析XMLType格式字段

    背景:项目从某数据交换平台获取XML数据,以Oracle的XMLType格式保存在数据库字段中,需要建立触发器.存储过程,在保存数据时解析XML字段,将数据写入其他业务表中. 参考资料:Oracle的 ...

  9. Webrtc源码走读(一)

    阅读event_wrapper.h   event_wrapper_win.cpp 的实现 自己对“事件”这个词没有深的理解,通过看段代码,好像有点感觉,类似与C#的AutoResetEvent

  10. Windows 本地文件搜索神器

    Wox: Windows 本地文件搜索神器 下载地址: https://github.com/Wox-launcher/Wox 注: Wox只能搜索C盘下的文件,所以需要结合everything 如果 ...