如何使用Springboot整合GridFS实现文件操作
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,本篇内容介绍了"如何使用Springboot整合GridFS实现文件操作"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅
千家信息网最后更新 2025年01月28日如何使用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 Mapupload(@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安全错误
数据库的锁怎样保障安全
大健康杂志哪个数据库收录
东南大学数据库原理辛研
2k22为什么总是连不上服务器
数据库第二章测试
Linux服务器搭建和管理
学籍管理服务平台连接服务器失败
青浦区正规软件开发口碑推荐
腾讯云服务器账号密码
湖北网络安全审计硬件设备价位
服务器安全策略分析
网络安全专项自查方案
moomsec网络安全论坛
方舟服务器可以跨地图传送物品吗
南通软件开发培训老师
数据库如何分页
有关网络安全学习的手抄报
公安网络技术人员
软件开发对电脑有要求吗
银川软件开发定制多少费用
上位机软件开发现状
数据库逻辑视图
昆明网站的数据库用什么设计
淮安通用软件开发行业
独奏骑士服务器同步失败
新时代的网络安全展会
数据库完整性怎么写
天津数据服务器
数据库的初学者
社区网络安全线
数据库技术:设计与应用实例