项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现
文章目录
- 基于Spring Boot的文件上传下载功能模块的设计与实现
- 1、前言
- 2、技术栈
- 3、关键源码
- 4、实现效果
- 4.1、登录
- 4.2、文件列表
- 4.3、上传文件测试
- 4.3.1、测试图片
- 4.3.2、文档
- 4.4、预览和下载文件测试
- 4.4.1、图片预览和下载
- 4.4.2、文档预览和下载
- 5、源码下载
基于Spring Boot的文件上传下载功能模块的设计与实现
1、前言
2021年的5月份,那时的我大二,受某个学校的老师之托,帮助学校的某个学院做一个系统《创新项目申报管理支持系统》,功能是管理学校的双创项目,能实现项目从申报到结题等等一系列的操作。团队成员一共4个,2个后端+2个前端,我作为项目组长并且负责后端功能的实现,其中有一部分的功能就是文件(PDF、Word、图片……)等资源的上传与下载,当时的我对这些很迷糊,不知道如何去实现,于是就学了一段时间。
整个系统历时9个月,因为都是学生嘛,加上做学校用得系统,不断地调研,分析需求,所以做的比较慢,一直上线测试,然后就调式改BUG,最后系统能基本实现学校的要求,文件上传下载这个模块功能也是很好地实现,我将系统中的文件上传和下载的功能模块抽出来(因为我不知道原系统能否分享,毕竟是帮学校做的),特此分享。
为了更好地演示,搭了个很丑的页面,但是后端只需要关注业务逻辑怎么实现即可,实际开发过程中,会有前端小姐姐去美化界面的,我们要做的就是实现功能即可。
源码下载:下载链接:《基于SpringBoot的文件上传下载功能模块的设计与实现.zip》。
代码中基本都写了很详细的注释。
2、技术栈
Spring Boot+MyBatis+Thymeleaf+JSP
3、关键源码
其实,FileController.java就已经实现了最主要的业务功能了,剩下的就是数据库的增删改查了,我相信那些肯定没什么难度吧啊哈哈哈~
@Controller
@RequestMapping("/file")
public class FileController {@Autowiredprivate UserFileService userFileService;@Value("${upload.dir}")private String uploadPath;/*** 返回当前用户的所有文件列表---json格式数据*/@GetMapping("/findAllJSON")@ResponseBodypublic List<UserFile> findAllJSON(HttpSession session, Model model) {//在登录的session中获取用户的idUser user = (User) session.getAttribute("user");//根据用户id查询有的文件信息List<UserFile> userFiles = userFileService.findByUserId(user.getId());return userFiles;}/*** 删除文件信息*/@GetMapping("/delete")public String delete(String id) throws FileNotFoundException {//根据id查询信息UserFile userFile = userFileService.findById(id);//删除文件String realPath = ResourceUtils.getURL("classpath:").getPath() + "/static" + userFile.getPath();File file = new File(realPath, userFile.getNewFileName());if (file.exists()) {file.delete();//立即删除}//删除数据库中记录userFileService.delete(id);return "redirect:/file/showAll";}/*** 文件下载*/@GetMapping("/download")public void download(String openStyle, String id, HttpServletResponse response) throws IOException {//获取打开方式openStyle = openStyle == null ? "attachment" : openStyle;//获取文件信息UserFile userFile = userFileService.findById(id);//点击下载链接更新下载次数if ("attachment".equals(openStyle)) {userFile.setDowncounts(userFile.getDowncounts() + 1);userFileService.update(userFile);}//根据文件信息中文件名字 和 文件存储路径获取文件输入流String realpath = uploadPath + userFile.getPath();//获取文件输入流FileInputStream is = new FileInputStream(new File(realpath, userFile.getNewFileName()));//附件下载response.setHeader("content-disposition", openStyle + ";fileName=" + URLEncoder.encode(userFile.getOldFileName(), "UTF-8"));//获取响应输出流ServletOutputStream os = response.getOutputStream();//文件拷贝IOUtils.copy(is, os);IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);}/*** 上传文件处理 并保存文件信息到数据库中*/@PostMapping("/upload")public String upload(@RequestParam(value = "uploadFile") MultipartFile uploadFile,HttpSession session) throws IOException {//获取上传文件用户idUser user = (User) session.getAttribute("user");//获取文件原始名称String oldFileName = uploadFile.getOriginalFilename();//获取文件后缀String extension = "." + FilenameUtils.getExtension(uploadFile.getOriginalFilename());//生成新的文件名称String newFileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + UUID.randomUUID().toString().replace("-", "") + extension;//文件大小Long size = uploadFile.getSize();//文件类型String type = uploadFile.getContentType();//处理根据日期生成目录//String realPath = ResourceUtils.getURL("classpath:").getPath() + "/static/files";String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());String dateDirPath = uploadPath + "/files/" + dateFormat;File dateDir = new File(dateDirPath);if (!dateDir.exists()) {dateDir.mkdirs();}//处理文件上传uploadFile.transferTo(new File(dateDir, newFileName));//将文件信息放入数据库保存UserFile userFile = new UserFile();userFile.setOldFileName(oldFileName).setNewFileName(newFileName).setExt(extension).setSize(String.valueOf(size)).setType(type).setPath("/files/" + dateFormat).setUserId(user.getId());userFileService.save(userFile);return "redirect:/file/showAll";}/*** 展示所有文件信息*/@GetMapping("/showAll")public String findAll(HttpSession session, Model model) {//在登录的session中获取用户的idUser user = (User) session.getAttribute("user");//根据用户id查询有的文件信息List<UserFile> userFiles = userFileService.findByUserId(user.getId());//存入作用域中model.addAttribute("files", userFiles);return "showAll";}
}
4、实现效果
4.1、登录
根据用户信息来查看用户上传了哪些文件。
4.2、文件列表
4.3、上传文件测试
4.3.1、测试图片
查看文件夹:
查看数据库:
4.3.2、文档
上传:
文件夹:
数据库:
4.4、预览和下载文件测试
点击左侧的操作按钮,选择功能:
4.4.1、图片预览和下载
图片预览:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWunLgGv-1657444882098)(E:\File\Blog\项目\5_功能实战之文件上传下载\文件上传下载.assets\image-20220710171047486.png)]
图片下载:
4.4.2、文档预览和下载
文档预览:
文档下载:
5、源码下载
可以根据关键源码的FileController.java去理解,其实已经能实现80%的功能了,剩下20%就是数据库操作了,若想直接拿源码,则点击下载即可。
下载链接:《基于SpringBoot的文件上传下载功能模块的设计与实现.zip》。
项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现相关推荐
- Mr.张小白(案例:基于Spring MVC实现文件上传和下载)
基于Spring MVC实现文件上传和下载 一.步骤 1.引入相关依赖pom.xml <?xml version="1.0" encoding="UTF-8&quo ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解
今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...
- 教你如何实现c#文件上传下载功能
简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...
- java实现文件上传下载功能
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- SpringMVC Web实现文件上传下载功能实例解析
需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...
- springboot 上传文件解析入库_十五分钟用Spring Boot实现文件上传功能
Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且制作一个文件上传系统, 用户可以将本地文件上传到服务器上.我将假设读者为几乎零基础, ...
- java图片加水印上传工具类_基于Spring Boot实现图片上传/加水印一把梭操作
文章共537字,阅读大约需要 2分钟 ! 概述 很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站.自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实现从 ...
- java spring上传图片_基于Spring Boot实现图片上传/加水印一把梭操作
文章共 537字,阅读大约需要 2分钟 ! 概述 很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站.自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实现 ...
最新文章
- 打开浏览器的包 node_如何发布可在浏览器和Node中使用的软件包
- 二进制数代替数组做标记
- GDCM:gdcm::PixelFormat的测试程序
- MATLAB混合编程视频教程下载 SIMULINK系统仿真视频
- 【ES9(2018)】Object Rest Spread
- html怎么给变量添加样式,通过CSS变量修改样式
- Golang实践录:使用gin框架实现转发功能:利用nginx转发
- 用CALayer实现下载进度条
- linux脚本下载,linux_脚本编写基础
- PMP试题 | 每日一练,快速提分
- 芯烨 XP-350b 打印机驱动
- java 裁剪 pdf_Java 合并、拆分PDF文档
- java线程锁有哪几种_Java锁有哪些种类,以及区别
- HDU4622 Reincarnation
- Hustoj 添加管理员 删除用户
- Matplotlib颜色、线宽、线型、透明度、点型
- maven dependency的作用英文解释(转载)
- html5播放器的示例代码
- 爬虫ua设置及ip代理
- 网站是不是php是什么意思,php网站是什么意思?