1、上传:

private static Logger log = LoggerFactory.getLogger(MongoDbFSUtil.class);

   private static final class MongoInstance {
public final static MongoClient client;
static {
client = new MongoClient("localhost", 27017);
}
} public static MongoDatabase getDatabase(String databaseName) {
return MongoInstance.client.getDatabase(databaseName);
} /**
* 上传文件
* @param file
* @param databaseName
* @return
*/
public static String uploadFileToGridFS(File file,String databaseName) {
InputStream in = null;
String returnId = null;
String pathName = file.getPath();
String[] pathNameArray = pathName.split("\\\\");
String[] name = pathNameArray[pathNameArray.length-1].split("\\.");
String filename = name[0];
String type = name[name.length-1];
try {
in = new FileInputStream(file);
GridFSBucket bucket = GridFSBuckets.create(getDatabase(databaseName));
GridFSUploadOptions options = new GridFSUploadOptions();
//设置除filename以为的其他信息
Document metadata = new Document();
metadata.append("contentType", type);
options.metadata(metadata);
// ObjectId fileId = bucket.uploadFromStream(filename+type, in,options);
ObjectId fileId = bucket.uploadFromStream("123456", in,options);
returnId = fileId.toHexString();
log.info("文件上传成功");
} catch (IOException e) {
log.info("upload fail:" + e);
} finally {
try {
in.close();
} catch (IOException e) {
log.info("close inputstream fail:" + e);
}
}
return returnId;
}
另外一种上传:使用
  1. @Autowired
  2.  
    private GridFsTemplate gridFsTemplate;

UserAO user = (UserAO) SecurityUtils.getSubject().getPrincipal();
Part part = request.getPart("file");
// 获得提交的文件名
String fileName = part.getSubmittedFileName();
// 获得文件输入流
InputStream ins = part.getInputStream();
// 获得文件类型
String contentType = part.getContentType();
// 将文件存储到mongodb中,mongodb 将会返回这个文件的具体信息
GridFSFile gridFSFile = gridFsTemplate.store(ins, fileName, contentType);
FileInfoAO fileInfo = new FileInfoAO();
fileInfo.setContentType(contentType);
fileInfo.setFileName(fileName);
fileInfo.setLastUpdateBy(user != null ? user.getId() : null);
fileInfo.setMongoFileId(gridFSFile.getId().toString());
return ServiceResultHelper.genResultWithSuccess(fileInfo);

2、下载
@RequestMapping("/downLoadFile")
public void downLoadFile(String fileId, HttpServletRequest request, HttpServletResponse response)throws Exception{
Query query = Query.query(Criteria.where("filename").is("123456"));
// 查询单个文件
GridFSDBFile gfsfile = gridFsTemplate.findOne(query);
if (gfsfile == null) {
return;
}
String fileName = gfsfile.getFilename().replace(",", "");
//处理中文文件名乱码
if (request.getHeader("User-Agent").toUpperCase().contains("MSIE") ||
request.getHeader("User-Agent").toUpperCase().contains("TRIDENT")
|| request.getHeader("User-Agent").toUpperCase().contains("EDGE")) {
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
} else {
//非IE浏览器的处理:
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
// 通知浏览器进行文件下载
response.setContentType(gfsfile.getContentType());
response.setHeader("Content-Disposition", "attachment;filename=\"" + "222.png" + "\"");
gfsfile.writeTo(response.getOutputStream()); }

springboot实现mongodb上传下载的更多相关文章

  1. SpringBoot图文教程4—SpringBoot 实现文件上传下载

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  2. SpringBoot的文件上传&下载

    前言:不多BB直接上代码 文件上传 pom依赖添加commons-io <!-- 上传/下载jar https://mvnrepository.com/artifact/commons-io/c ...

  3. spring-boot 实现文件上传下载

    @Controller public class FileUploadCtrl { @Value("${file.upload.dir}") private String path ...

  4. springboot文件上传下载简单使用

    springboot的文件上传比较简单 一.使用默认的Resolver:StandardServletMultipartResolver controller package com.mydemo.w ...

  5. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

  6. springboot整合vue实现上传下载文件

    https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...

  7. springboot简易上传下载

    1.导入上传下载依赖: <dependency> <groupId>commons-fileupload</groupId> <artifactId>c ...

  8. 仵航说 前后端分离,文件上传下载(springBoot+vue+elementUI)仵老大

    1.介绍 ​ 本文主要是介绍前后端分离的上传下载,后端使用的是SpringBoot,持久层用的是mybatis-plus,前端用的Vue,UI用的elementUI,测试了一下,文本,图片,excel ...

  9. SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)

    SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...

随机推荐

  1. (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    Spring Boot 系列博客] 更多查看博客:http://412887952-qq-com.iteye.com/blog Spring Boot默认的数据源是:org.apache.tomcat ...

  2. 转载 - Catalan数(卡特兰数)

    出处:http://blog.sina.com.cn/s/blog_6aefe4250101asv5.html 什么是Catalan数 说到Catalan数,就不得不提及Catalan序列,Catal ...

  3. POJ 2373

    原本一道挺简单的DP题,思路有了,运用单调队列,但在写单调队列时写挫了... 这道题只需要计算偶数位置的即可,这是显而易见的,我有注意过这情况,写的时候却没在意...--! 加入队列的元素应该当前no ...

  4. swift 笔记 (十四) —— 构造过程

    构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们一般会定义一个方法来完毕,这种方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作 ...

  5. FZU 1851 组合数

    给你两个数n和m,然后让你求组合数C(n,m)中的质因子的个数. 这里用到的一个定理:判断阶乘n!中的质因子 i 的个数的方法---f(n!)=n/i+n/i^2+n/i^3+.....n/i^m ( ...

  6. Android-68-Tomcat各种启动错误的解决的方法,如:Exception in thread &quot;Thread-6&quot; NoClassDefFoundError,Document base E:\

     上午遇到一个棘手的事儿,导入一个project,结果把原有的Tomcatserver给导坏了.各种红的.黑的.蓝的错误满天飞啊,刚弄完一个项目,怕被毁了.我那个揪心呀! 还好.在走头无路的情况下 ...

  7. mysql查询count

    Every derived table must have its own alias 每个派生出来的表都必须有一个自己的别名 一般在多表查询时,会出现此错误. 因为,进行嵌套查询的时候子查询出来的的 ...

  8. SRM 621 D2L3: MixingColors, math

    题目:http://community.topcoder.com/stat? c=problem_statement&pm=10409&rd=15854 利用高斯消元求线性空间的基,也 ...

  9. [jqpolt] formatString 日期格式化列表

    // 年 %Y   2008 %y   08 // 月 %m   09 %#m   9 %B   September %b   Sep // 日 %d   05 %#d   5 %e   5 %A   ...

  10. linux 标准输出和后台运行

    一.后台运行程序 至需要在命令后面加上一个 & 即可 # command & 例如: python test.py & 二.标准输出.标准错误输出 # command > ...