0


一张图带你学会入门级别的SpringBoot实现文件上传、下载功能

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:SpringBoot实战


系列文章目录

标题一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码)一张思维导图带你学会Springboot创建全局异常、自定义异常一张思维导图带你打通SpringBoot自定义拦截器的思路28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈一张思维导图带你学会SpringBoot、Vue前后端分离项目线上部署一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件一张思维导图带你学会使用SpringBoot异步任务实现下单校验库存一张思维导图带你学会SpringBoot使用AOP实现日志管理功能

在这里插入图片描述


文章目录

思维导图

在这里插入图片描述

🌟前言

在开发系统过程中,往往离不开系统文件上传于下载的功能,本篇文章就对SpringBoot实现文件上传与下载功能作出演示。

🌟要点准备

MultipartFile是Spring框架提供的一个接口,用于处理文件上传的请求

。它封装了上传的文件内容、文件名、大小等信息,并提供了一些常用的方法来操作文件。下表是常用的API
方法描述

String getOriginalFilename()

获取上传文件的原始文件名

String getName()

获取文件域的名称

String getContentType()

获取上传文件的内容类型

boolean isEmpty()

判断上传的文件是否为空

long getSize()

获取上传文件的大小,单位为字节

byte[] getBytes()

将上传文件的内容以字节数组形式返回

InputStream getInputStream()

获取上传文件的输入流,可以用于读取文件内容

void transferTo(File dest)

将上传文件保存到指定的目标文件

🌟实现步骤

功能概述:实现文件上传功能并保存到数据库表file中,以及文件下载功能。
实现思路:

  1. 客户端通过发送上传请求到 Spring Boot 服务器,服务器返回一个上传页面供用户选择文件。
  2. 用户选择并上传文件,服务器获取文件信息(文件名称、文件路径、文件大小、文件类型)。
  3. 服务器将文件保存到指定的存储设备中。
  4. 存储设备将文件保存成功后,服务器将文件信息保存到数据库。
  5. 服务器返回上传成功消息给客户端。
  6. 客户端发起下载请求,服务器根据文件ID查询文件信息。
  7. 服务器从数据库中获取文件信息。
  8. 服务器根据文件路径从存储设备中获取文件。
  9. 服务器构建文件资源,并将其返回给客户端。
  10. 客户端请求下载指定文件,服务器根据文件路径从存储设备中获取文件。
  11. 服务器设置响应头信息,并构建响应体返回给客户端。

数据表准备

创建数据库表file

  • id:主键ID
  • file_name:文件名称
  • file_path:文件路径
  • file_type:文件类型
  • file_size:文件大小
CREATETABLE`file`(`id`int(11)NOTNULLAUTO_INCREMENT,`file_name`varchar(255)CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci NULLDEFAULTNULL,`file_path`varchar(255)CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci NULLDEFAULTNULL,`file_type`varchar(255)CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci NULLDEFAULTNULL,`file_size`bigint(20)NULLDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=1CHARACTERSET= utf8mb4 COLLATE= utf8mb4_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS =1;

File实体类

创建File实体类,并生成getter和setter方法。这里我做出了省略。

publicclassFileimplementsSerializable{privateInteger id;privateString fileName;privateString filePath;privateInteger fileSize;privateString fileType;//省略getter,setter}

配置文件保存目录

file.upload-path = E:/upload

FileController编写

注意一定要将文件保存到本地路径后,再进行数据库信息的保存!本上传方法较为简单,非常适合入门级别查看。

@RestController@RequestMapping("/api/v1/file")publicclassFileController{@AutowiredprivateFileService fileService;@Value("${file.upload-path}")privateString uploadPath;//上传功能@GetMapping("upload")publicJsonDatauploadFile(@RequestParam("file")MultipartFile file)throwsIOException{//获取文件上传名称String fileName=file.getOriginalFilename();//获取文件保存全路径String savePath=uploadPath+"/"+fileName;//获取文件大小Long fileSize=file.getSize();//获取文件类型String fileType=file.getContentType();java.io.File newFile=newjava.io.File(savePath);//TODO 注意要将文件保存到本地路径中
        file.transferTo(newFile);File saveFile=newFile();
        saveFile.setFileName(fileName);
        saveFile.setFileSize(fileSize);
        saveFile.setFileType(fileType);
        saveFile.setFilePath(savePath);
        fileService.saveFile(saveFile);returnJsonData.buildSuccess();}}//文件下载@GetMapping("down")publicResponseEntitydownFile(@RequestParamInteger id)throwsMalformedURLException,UnsupportedEncodingException{//首先根据id,从数据库获取文件信息File downFile=fileService.selectFileById(id);if(downFile!=null){String path= downFile.getFilePath();//本地路径地址转为url编码路径URI urlPath=Paths.get(path).toUri();Resource resource=newUrlResource(urlPath);if(resource.exists()){HttpHeaders headers=newHttpHeaders();
                headers.add(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_OCTET_STREAM+"");
                headers.add(HttpHeaders.CONTENT_LENGTH,downFile.getFileSize()+"");//注意文件名处要改为URL编码
                headers.add(HttpHeaders.CONTENT_DISPOSITION,"attachment; filename=\""+URLEncoder.encode(downFile.getFileName(),"utf-8")+"\"");returnResponseEntity.ok().headers(headers).body(resource);}}returnResponseEntity.notFound().build();}

🌟最终测试

文件上传

在这里插入图片描述
数据库成功保存并且本地路径也有当前文件
在这里插入图片描述
在这里插入图片描述

文件下载

在这里插入图片描述

🌟写在最后

有关于SpringBoot实现文件上传、下载功能到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

标签: spring boot java 后端

本文转载自: https://blog.csdn.net/2302_79094329/article/details/132193086
版权归原作者 DaenCode 所有, 如有侵权,请联系我们删除。

“一张图带你学会入门级别的SpringBoot实现文件上传、下载功能”的评论:

还没有评论