如何使用Springboot整合GridFS实现文件操作
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本篇内容介绍了"如何使用Springboot整合GridFS实现文件操作"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅
千家信息网最后更新 2025年11月11日如何使用Springboot整合GridFS实现文件操作
本篇内容介绍了"如何使用Springboot整合GridFS实现文件操作"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
目录
GridFsOperations,实现GridFS文件上传下载删除
上传下载删除功能实现
测试
上传
下载
删除
GridFsOperations,实现GridFS文件上传下载删除
最近学习GridFS,想用它整合springboot弄个文件的上传下载。
网上查到的很多资料都是使用GridFsTemplate,还有GridFSBucket来实现的,需要各种额外配置Bean。但是看了spring-data-mongodb的官方文档,以及示例代码,他们只用到了GridFsOperations,无需其他任何配置。
然后就用GridFsOperations写了个文件上传下载的demo,用起来还是很方便的,给大家个参考。
上传下载删除功能实现
pom.xml
org.springframework.boot spring-boot-starter-data-mongodb
application.properties
#文件上传下载配置spring.servlet.multipart.max-file-size=1024MBspring.servlet.multipart.max-request-size=1024MB
FileController
package com.example.tryRedis.controller;import static org.springframework.data.mongodb.core.query.Query.*;import static org.springframework.data.mongodb.gridfs.GridFsCriteria.*;import com.mongodb.client.gridfs.model.GridFSFile;import io.swagger.v3.oas.annotations.Parameter;import org.bson.types.ObjectId;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.gridfs.GridFsOperations;import org.springframework.data.mongodb.gridfs.GridFsResource;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.util.HashMap;import java.util.Map;@RestController@RequestMapping("/file")public class FileController { @Autowired GridFsOperations gridFsOperations; //上传文件 @PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Map upload(@Parameter @RequestPart(value = "file") MultipartFile file){ //开始时间 long begin = System.nanoTime(); Map map = new HashMap<>(); try{ InputStream streamForUpload = file.getInputStream(); ObjectId objectId = gridFsOperations.store(streamForUpload,file.getOriginalFilename(),file.getContentType()); //上传结束 long end = System.nanoTime(); long time = end-begin; System.out.println("本次上传共耗时: "+ time); System.out.println("上传成功!文件名: "+file.getOriginalFilename()+". 文件ID: "+objectId); map.put(file.getOriginalFilename(),objectId); }catch (Exception e){ e.printStackTrace(); } return map; } //查询并下载文件 @GetMapping("/download") public String download(String filename, HttpServletResponse response) throws IOException { //开始时间 long begin = System.nanoTime(); //查询文件 GridFSFile result = gridFsOperations.findOne(query(whereFilename().is(filename))); GridFsResource gridFsResource= gridFsOperations.getResource(result); String contentType = gridFsResource.getContentType(); System.out.println("contentType: "+contentType); System.out.println("filename: "+gridFsResource.getFilename()); response.reset(); response.setContentType(contentType); //注意: 如果没有下面这行设置header, 结果会将文件的内容作为响应的 body 直接输出在页面上, 而不是下载文件 response.setHeader("Content-Disposition","attachment;filename="+filename); //指定下载文件名 ServletOutputStream outputStream = response.getOutputStream(); InputStream is = gridFsResource.getInputStream(); byte[] bytes = new byte[1024]; int len = 0; while ((len=is.read(bytes))!=-1){ outputStream.write(bytes,0,len); } is.close(); outputStream.close(); //下载结束 long end = System.nanoTime(); long time = end-begin; System.out.println("本次下载共耗时: "+ time); return contentType; } @DeleteMapping("/delete") public String deleteFile(@Parameter @RequestParam("filename") String filename){ gridFsOperations.delete(query(whereFilename().is(filename))); return "delete success"; }} 测试
上传

下载
红色圈内点击download就可以下载啦。或者在地址栏直接输入localhost:8080/file/download?filename=todo.txt 也可以直接下载文件(这里的todo.txt是我测试的文件,你们填自己上传的文件名,不要忘了加上后缀名!)

删除
上面这些上传删除功能测试的时候,大家也可以结合mongodb的数据库去看看。
"如何使用Springboot整合GridFS实现文件操作"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
文件
上传下载
测试
整合
内容
功能
文件名
配置
时间
更多
知识
学习
查询
输出
实用
成功
学有所成
接下来
代码
功能测试
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
mysql 服务器下载
鹰潭高性价比服务器哪里比较好
网站中间件数据库和网页关系
怀旧服服务器锁定怎么解锁
亚信安全云安全防护服务器
电脑的代理服务器关了会怎么样
贵阳的软件开发有限公司有哪些
我的世界大规模服务器
联通突然连不上一个服务器了
浙江参考软件开发销售价格
58红包软件开发装
宗门争霸服务器入口在哪
jsp连接数据库代码
武汉二五六互联网科技公司
网络安全的心得体会四年级
中专学网络安全
四川回收服务器主板云主机
会导致网络安全的漏洞是什么
为什么有些游戏要整合服务器
互联网科技公司英文名字
木链网刃杯网络安全大赛
小宇网络技术
航空工业网络安全
福建上位机软件开发
界面当时创建数据库
软件开发专业实训报告范本
深圳市网络安全宣传
阿里巴巴数据库员工工资
计算机网络技术讲解
陕西省软件开发订制