参考MongoDB官方文档GridFS的部分下载文件。

ObjectId fileId = new ObjectId("60345d38ebfcf47030e81cc9");
try (GridFSDownloadStream downloadStream = gridFSBucket.openDownloadStream(fileId)) {int fileLength = (int) downloadStream.getGridFSFile().getLength();byte[] bytesToWriteTo = new byte[fileLength];downloadStream.read(bytesToWriteTo);System.out.println(new String(bytesToWriteTo, StandardCharsets.UTF_8));
}

下载图片时发现图片不完整,只下载了第一个chunck。
参考stackoverflow,GridFSDownloadStreamImpl的read方法是逐chunck读取的,因此文件大小大于chunk的时候需要循环读取。修改代码,图片可以完整下载。

    public void downloadMongoFile() throws Exception {ObjectId fileId = new ObjectId("60345d38ebfcf47030e81cc9");GridFSDownloadStream downloadStream = gridFSBucket.openDownloadStream(fileId);int fileLength = (int) downloadStream.getGridFSFile().getLength();byte[] bytes = new byte[fileLength];OutputStream outputStream = Files.newOutputStream(Paths.get("./img.jpg"));int bytesRead = 0;while(bytesRead < fileLength) {int newBytesRead = downloadStream.read(bytes);if(newBytesRead == -1) {throw new Exception();}// System.out.println("off: " + bytesRead);outputStream.write(bytes, 0, newBytesRead);bytesRead += newBytesRead;}outputStream.flush();outputStream.close();}

Java GridFS MongoDB 下载文件 内容不完整相关推荐

  1. java 下载文件内容为空_java 下载文件 内容为空。

    Java日志使用slf4j 配置log4j后,有日志文件 但日志文件内容为空 SLF4J的全称是Simple Logging Facade for Java,即简单日志门面. SLF4J并不是具体的日 ...

  2. java中读取properties文件内容五种方式

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  3. PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)

    记得高中时候做过游戏私服,那时候的游戏主页是用PHP写的,因为文件很固定,客户端,登陆器和一些小工具,文件数目也不是很多,所以都是直接把下载链接写死的,直接链接到本地服务器的文件目录,今天QQ群有个朋 ...

  4. java ftp获取文件夹大小,java 用FTPClient 下载文件时不显示总大小?解决方案

    java 用FTPClient 下载文件时不显示总大小? FTPClient ftp = new FTPClient(); ftp.setControlEncoding("utf-8&quo ...

  5. 五种方式让你在java中读取properties文件内容不再是难题

    2019独角兽企业重金招聘Python工程师标准>>> 方式1.通过context:property-placeholder加载配置文件jdbc.properties中的内容 < ...

  6. Java实现FTP下载文件到客户端(浏览器)

    目录 一.简介 二.maven依赖 三.配置类 四.工具类 4.1.服务器文件名中文处理 4.2.下载文件名中文处理 五.接口验证 一.简介   我在之前的文章(Java实现文件上传和下载)里讲过非F ...

  7. 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题

    [踩坑]Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题 一. 问题重现 二. 问题解决思路 1. 确认是不是上传就导致数据出错了 2. 是不是平台问题 三. ...

  8. java从url下载文件_从URL下载Java文件

    java从url下载文件 Today we will learn how to download a file from URL in java. We can use java.net.URL op ...

  9. java使用HttpGet下载文件

    前面有写过HttpPost上传文件,结果不久又遇到要用java代码去下载文件的需求:代码中的url是文件的访问地址 public static byte[] get(String url, Map&l ...

最新文章

  1. 理解和使用systrace
  2. POJ3041_Asteroids
  3. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题
  4. 前置++与后置++的要点分析
  5. 超火网络直播短视频宣传海报PSD分层模板,新媒体互动
  6. python局部变量函数_python函数局部变量用法实例分析
  7. 可视化—解决graphviz保存决策树中文乱码问题
  8. 190627每日一句南京创新周;那些绝对不会失败的人,是永远不去尝试的人
  9. 【ROS】编译软件包packages遇到进度缓慢或卡死,使用swap
  10. 深层和浅层特征融合的坑
  11. 4. AWS DynamoDB实战之Secondary Indexes
  12. 菜鸟的mongoDB学习---(二)MongoDB 数据库,对象,集合
  13. 超详细的TypeScript入门教程!
  14. C++正则表达式(regex_match、regex_search与regex_replace)
  15. wannier插值能带拟合4
  16. 数据库笔试——查出各部门超出部门平均薪资的员工的姓名,薪资,所在部门名称及部门平均薪水...
  17. latex数学公式编写(一):latex矩阵编写
  18. Java微服务框架一览
  19. [MS Project]Project软件入门两天之旅
  20. vue-barcode生成条形码

热门文章

  1. C++线程池原理及创建
  2. C语⾔的标识符以及规范
  3. Android在xml文件中设置颜色透明度
  4. Python通过解压ofd文件获取发票信息
  5. Farkas'Lemma 和 S-Lemma
  6. HTTP Error 503 错误解决办法
  7. gamma correct blurring
  8. Mongoose Populate
  9. Codeforces-868C - Qualification Rounds - 思维
  10. iview构建基本html页面,写前端页面步骤----vue+iview