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);
} }
java将字符串存入GridF并通过id或文件名查询的更多相关文章
- java将字符串存入oracle的Blob中
Blob内存放的是字节数组,需使用String的getBytes获得该字符串的字节数组(注意字符集编码),然后存入Blob. Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用 ...
- android112 jni 把java的字符串转换成c的字符串,数组处理
package com.itheima.charencode; import android.os.Bundle; import android.app.Activity; import androi ...
- 基于easyui框架中input 类型的checkbox拼接成字符串存入数据库和读取选中---善良公社项目
项目中我做修改用户个人资料的时候,有一个需求是帮助人员的帮助类型如图下所示: 当初想如果是asp.net控件的话应该很简单实现,如果不是基于easyUI框架那就太简单了,现在是受框架的限制与是前端ht ...
- Java对字符串加密并返回星号※
If you don't look back, you'll never know I waiting for you behind you. Java对字符串加密并返回星号※ PasswordUt ...
- JAVA四则运算字符串解释器
最近学习到后缀表达式,于是基于后缀表达式的思想,写了一个四则运算解释器,输入字符串类型的四则运算表达式,可以直接得到结果,支持括号嵌套. 实现时主要考虑以下两点: 字符串中运算符和数字分离 运算符优先 ...
- java 替换字符串模板(模板渲染)
java渲染字符串模板,也就是说在java字符串模板中设置变量字符串,使用变量去渲染指定模板中设置好的变量字符串.下面介绍4种替换模板方式: 1.使用内置String.format String me ...
- Java 求字符串中出现频率最高字符
前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下. import java.util.ArrayList; import java.util.Arrays; import ja ...
- Java中字符串为什么不以\0结尾
Java中字符串为什么不以\0结尾 其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的 ...
- Java常量字符串String理解
Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用 "eq ...
随机推荐
- 稳重商务风格教师求职简历免费word模板
30款稳重商务风格教师求职简历免费word模板,也可用于其他专业和职业,个人免费简历模板,个人简历表免费,个人简历表格. 声明:该简历模板仅用于个人欣赏使用,请勿用于商业用途,谢谢. 下载地址:百度网 ...
- Zigbee系列(路由机制)
参考文档: ug103-02-fundamentals-zigbee.pdf section4 zigbe routing concepts docs-05-3474-21-0csg-zigbee-s ...
- python通讯录系统
---恢复内容开始--- 对于一般的通讯录系统,主要有两个参数:姓名和电话号码,所以可以利用python编程里面的字典来进行建立之间的所属关系, 可以利用以下代码简单实现: print('|--- 欢 ...
- Unity扩展编辑器五
扩展系统自带组件Inspector 可以在系统摄像机组建上添加一个按钮,这样就可以单独处理逻辑了
- 【厚积薄发】Crunch压缩图片的AssetBundle打包
这是第133篇UWA技术知识分享的推送.今天我们继续为大家精选了若干和开发.优化相关的问题,建议阅读时间10分钟,认真读完必有收获. UWA 问答社区:answer.uwa4d.com UWA QQ群 ...
- webpack新手入门——配置及安装
webpack 是一个现代 JavaScript 应用程序的静态模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的 ...
- Linux——CentOS7添加/删除用户和用户组(学习笔记)
1.新建用户 adduser testuser //新建testuser 用户 passwd testuser //给testuser 用户设置密码 2.建工作组 groupadd testgroup ...
- vue mock(模拟后台数据) +axios 简单实例(二)
需装上axios,build文件夹中webpack.dev.conf.js文件添加上vue mock配置的东东, 如,继(一) //组件<template> <div> &l ...
- 高可用OpenStack(Queen版)集群-17.一些问题
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- 【文章存档】Azure Web 应用如何修改 IIS 配置
链接 https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-h ...