java小白又来了,哈哈
这次记录操作mongodb的GridFS库
在插入文件后,同时给该Document添加其它字段,比如过期时间字段,
直接上代码示例:
/**
* 上载文件到MongoGridFS服务器
* @param mac
* @param filenames 文件路径集合(d:\77\77\hello.doc)
* @param expireat 文件过期时间
* @return
*/
public static boolean uploadFilesByNames(MongoAttachConnect mac, Set filenames,Date expireat){
//获得MongoClient对象
MongoClient mongoClient = MongoClientBuild.GetMongoAttachClient(mac);
//获得MongoDatabase对象
MongoDatabase db = mongoClient.getDatabase(mac.BaseName);
AtomicBoolean isOK = new AtomicBoolean(true);
GridFSBucket gridFS = GridFSBuckets.create(db);
// Create some custom options
GridFSUploadOptions options = new GridFSUploadOptions();
filenames.forEach(filename->{
File f =new File(filename);
if(!f.exists()){
isOK.set(false);
return;
}
try {
//获取文件名
String flame = f.getName();
//获取文件名类型 .pdf
String fileTye=flame.substring(flame.lastIndexOf("."),flame.length());
//定义输入流
FileInputStream fileInputStream=new FileInputStream(f);
//设置除filename以为的其他信息(此处生成的是子文档字段)
//不需要可以不用设置
Document metadata = new Document();
metadata.append("contentType", fileTye);
options.metadata(metadata);
//上传
gridFS.uploadFromStream(flame, fileInputStream,options);
/*更新添加过期字段 - 非子文档字段*/
//注意update文档里要包含"$set"字段
Document update = new Document();
update.append("$set", new Document("expireAt", expireat));
//查找到刚刚新增得附件,然后进行更新过期字段
db.getCollection("fs.files").updateOne(Filters.eq("filename",flame),update);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
});
return isOK.get();
}