上传有两种方式,一种是使用UploadFromStream,另外一种是OpenUploadStream方式,这里使用的是第二种方式:

    public ObjectId save(){GridFSBucket gfsbk = GridFSBuckets.create(db, "user_photo");byte[] data = "Data to upload into GridFS".getBytes(StandardCharsets.UTF_8);GridFSUploadStream uploadStream = gfsbk .openUploadStream("user_09734");uploadStream.write(data);ObjectId id = uploadStream.getFileId();uploadStream.close();return id;}

解析:
1. GridFSBucket gfsbk = GridFSBuckets.create(db, “user_photo”);

创建一个容器,传入一个`MongoDatabase`类实例db,和容器名称"user_photo"作为参数

2. GridFSUploadStream uploadStream = gfsbk .openUploadStream(“user_09734”);

打开上传流,传入一个String参数作为GirdFS文件的文件名

3. ObjectId id = uploadStream.getFileId();

得到刚刚上传的文件的id

Mongo Java驱动GirdFS上传参考资料
下面是我编写的上传帮助类:

package com.huanle.utils.db;import java.io.ByteArrayOutputStream;
import java.io.IOException;import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.huanle.utils.model.FileEntity;
import com.mongodb.Block;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import com.mongodb.client.gridfs.GridFSUploadStream;
import com.mongodb.client.gridfs.model.GridFSFile;
import com.mongodb.gridfs.GridFS;@Component
public class GirdFSHelper {private GridFSBucket gfsbk;private MongoDatabase db;@Autowiredpublic GirdFSHelper(MongoDBHelper mongoManager){this.db = mongoManager.getDB("huanle");}/**保存文件到GirdFS,通过openUploadStream方式* @param bucket 容器名称* @param file 文件实体* @return 返回FileEntity*/public FileEntity save(String bucket,FileEntity file){gfsbk = GridFSBuckets.create(db, bucket);GridFSUploadStream uploadStream = gfsbk.openUploadStream(file.getFileName());uploadStream.write(file.getContent());ObjectId id = uploadStream.getFileId();uploadStream.flush();uploadStream.close();FileEntity filter = new FileEntity();filter.setId(id);filter = find(bucket,filter);return filter;}public FileEntity download(String bucket,FileEntity filter) throws IOException{filter = find(bucket,filter);if(filter==null){return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();gfsbk = GridFSBuckets.create(db, bucket);gfsbk.downloadToStream(filter.getId(), out);filter.setContent(out.toByteArray());out.close();return filter;}public FileEntity find(String bucket,FileEntity filter){gfsbk = GridFSBuckets.create(db, bucket);System.out.println(filter.toBson());GridFSFile result = gfsbk.find(filter.toBson()).first();if(result==null){ return null;}filter.setId(result.getObjectId());filter.setSize(result.getLength());filter.setFileName(result.getFilename());filter.setUploadTime(result.getUploadDate());return filter;}}package com.huanle.utils.model;import java.util.Date;import javax.validation.constraints.Past;import org.bson.Document;
import org.bson.types.ObjectId;
import org.hibernate.validator.constraints.Range;import com.huanle.utils.annotation.FileContent;
import com.huanle.utils.annotation.FileName;
import com.huanle.utils.annotation.PlainString;/**文件辅助实体类* @author luchu**/
public class FileEntity {public static String ID="_id",FILE_NAME="fileName",SIZE="size",UPLOAD_TIME="uploadTime",CONTENT="content";private ObjectId id;@PlainString@FileNameprivate String fileName;@Range(max=41943040)private long size;@Pastprivate Date uploadTime;@FileContentprivate byte[] content;public Document toBson(){Document doc = new Document();if(this.id!=null){doc.append(ID, this.id);}if(this.fileName!=null){doc.append(FILE_NAME, this.fileName);}if(this.size!=0){doc.append(SIZE, this.size);}if(this.uploadTime!=null){doc.append(UPLOAD_TIME, this.uploadTime);}return doc;}}

Java上传文件到MongoDB GirdFS相关推荐

  1. java上传文件到远程服务器(一)---HttpURLConnection方式

    我们在之前的文章 JavaWeb静态资源分离思路 中已经了解到要把文件上传到静态资源服务器有三种方式: java上传文件到ftp服务器(这个方案需要在静态资源服务器安装ftp服务) java使用Htt ...

  2. java上传文件功能_Java MemoryMapped文件的功能

    java上传文件功能 Java MemoryMapped文件的功能 在JDK 1.4中,内存映射文件的一个有趣功能被添加到Java中,该功能允许将任何文件映射到OS内存以进行有效读取. 内存映射文件可 ...

  3. java 上传文件注意事项

    java 上传文件注意事项 1.文件名有特殊字符的情况,所以最好是文件名前台url编码,后台再url解码,这点在下载的时候也一样 2.文件大小一定要设置,spring boot 有默认. 3.文件名校 ...

  4. java 上传文件到服务器_java上传文件到OSS云服务器(二)

    上篇文章中已经把接口端和service业务层写了,这次就把OSS上传文件的工具类补上. 一.首先配置好OSS服务器各项节点,这是在springboot中appliaction.yml配置文件中的写法. ...

  5. JAVA上传文件图片到服务器保存

    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存! 首先是页面 html的   我这是提交一个文件和类型 <div style="border: 1px solid ...

  6. Java上传文件到minio

    Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能.而且学习成本低,安装运维简单,开箱即用,提供 Java 客 ...

  7. Java上传文件保存到指定路径

    Java上传文件保存到指定路径 上代码 @PostMapping("/file-upload")@ApiOperation(value = "上传swagger.json ...

  8. java上传文件到服务器,java上传文件到云服务器

    java上传文件到云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装 ...

  9. java上传文件图片到服务器保存,Java上传文件图片到服务器的方法

    这里我记录一个比较简单方便操作的java上传文件图片到服务器并且保存,具体内容如下 首先是页面html的   我这是提交一个文件和类型 我是添加一张临时图片得到微信的media_id保存数据库! en ...

最新文章

  1. 在Unity中制作4种不同的游戏
  2. 服务器端开发经验总结 Linux C语言
  3. java文件流插入数据库_使用Java流查询数据库
  4. python一般用来开发什么-python主要用来做什么?Python开发简单吗?
  5. Winform中设置ZedGraph的X轴的刻度根据曲线获取
  6. 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树
  7. C/C++如何连接MySQL服务器以及简单加密
  8. 四个措施打造安全的DevOps流程
  9. 为你的简书和 GitHub 设定个性域名
  10. Atitit 游戏的通常流程 attilax 总结 基于cocos2d api
  11. NBIOT的BC26使用
  12. 二叉排序树,二叉平衡树,红黑树,B树,B+树的区别,作用,特性
  13. 2020亚马逊创新日:深度解读人工智能和机器学习的数字驱动力
  14. 空降到一个公司做高管,怎么打开局面?
  15. 合肥工业大学计算机保研,合肥工大(合肥工业大学保研去向)
  16. 分类计数原理与分步计数原理_分类加法计数原理与分步乘法计数原理的解题策略之一...
  17. android 设置壁纸,Android 代码设置壁纸的方式,兼容各大ROM
  18. 计算机网络ospf实验报告,计算机网络实验报告 12_OSPF实验.doc
  19. VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]
  20. 2021总结web渗透测试岗位面试题(个人亲身经历的总结)

热门文章

  1. 4、Flutter 采坑记录篇二_依赖库不兼容
  2. Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.21
  3. Android: 解决动画完成后位置恢复到初始位置的问题
  4. docker mysql输入中文_Docker解决终端无法输入中文的问题
  5. java错位_java – 如何保护自己免受参数错位的影响
  6. 数据库实验二 SQL语言
  7. 服务器mysql如何添加数据库文件,如何在使用MySQL作为嵌入式服务器时创建数据库文件...
  8. 【常见笔试面试算法题12续集六】动态规划算法案例分析6 最优编辑练习题
  9. 扩展 KMP(模板) 洛谷P5410
  10. 037-PHP如何返回闭包函数实例