java将字符串存入GridF并通过id或文件名查询
时间:2022-07-24
本文章向大家介绍java将字符串存入GridF并通过id或文件名查询,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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);
}
}
- OpenGL ES学习001---绘制三角形
- Android之MaterialDesign应用技术2-仿支付宝上滑搜索框缓慢消失
- 披着狼皮的羊——寻找惠普多款打印机中的RCE漏洞
- Android之MaterialDesign应用技术
- 蛙啊!老母亲给你整理了DEDECMS漏洞集合,快回家!
- Android之Bmob移动后端云服务器
- golang基于redis lua封装的优先级去重队列
- Java设计模式总汇二(小白也要飞)
- Java设计模式总汇一
- Android数据绑定技术二,企业级开发
- Android数据绑定技术一,企业级开发
- 工具| sqlmap payload修改之路(下)
- Retrofit网络请求库应用02——json解析
- Servlet与Jsp的结合使用实现信息管理系统二
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 设计模式-组装电脑入门简单工厂
- 搭建属于自己的FRP内网穿透
- 线上千万级大表排序该如何优化?
- LeetCode-7.整数反转 取模反转法与字符串法
- Spring Bean依赖
- Spring事务是如何应用到你的业务场景中的?
- MySQL8.0大表秒加字段,是真的吗?
- 大数据简介,技术体系分类整理
- 图像处理笔记(5)---- OpenCV 用滑动条做调色板
- 牛X | 一款比传统数据库快100-1000倍的数据库,认识一下
- SpringBoot统一参数校验
- SpringBoot多邮件源发送邮件
- 一个基础的SpringBoot项目该包含哪些
- leetcode树之平衡二叉树
- 3分钟短文:说说Laravel页面会话之间的数据保存Session用法