🧑💻作者名称: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中,以及文件下载功能。
实现思路:
- 客户端通过发送上传请求到 Spring Boot 服务器,服务器返回一个上传页面供用户选择文件。
- 用户选择并上传文件,服务器获取文件信息(文件名称、文件路径、文件大小、文件类型)。
- 服务器将文件保存到指定的存储设备中。
- 存储设备将文件保存成功后,服务器将文件信息保存到数据库。
- 服务器返回上传成功消息给客户端。
- 客户端发起下载请求,服务器根据文件ID查询文件信息。
- 服务器从数据库中获取文件信息。
- 服务器根据文件路径从存储设备中获取文件。
- 服务器构建文件资源,并将其返回给客户端。
- 客户端请求下载指定文件,服务器根据文件路径从存储设备中获取文件。
- 服务器设置响应头信息,并构建响应体返回给客户端。
数据表准备
创建数据库表file
- id:主键ID
- file_name:文件名称
- file_path:文件路径
- file_type:文件类型
- file_size:文件大小
CREATE TABLE `file` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`file_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`file_size` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
File实体类
创建File实体类,并生成getter和setter方法。这里我做出了省略。
public class File implements Serializable {
private Integer id;
private String fileName;
private String filePath;
private Integer fileSize;
private String fileType;
//省略getter,setter
}
配置文件保存目录
file.upload-path = E:/upload
FileController编写
注意一定要将文件保存到本地路径后,再进行数据库信息的保存!本上传方法较为简单,非常适合入门级别查看。
@RestController
@RequestMapping("/api/v1/file")
public class FileController {
@Autowired
private FileService fileService;
@Value("${file.upload-path}")
private String uploadPath;
//上传功能
@GetMapping("upload")
public JsonData uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
//获取文件上传名称
String fileName=file.getOriginalFilename();
//获取文件保存全路径
String savePath=uploadPath+"/"+fileName;
//获取文件大小
Long fileSize=file.getSize();
//获取文件类型
String fileType=file.getContentType();
java.io.File newFile=new java.io.File(savePath);
//TODO 注意要将文件保存到本地路径中
file.transferTo(newFile);
File saveFile=new File();
saveFile.setFileName(fileName);
saveFile.setFileSize(fileSize);
saveFile.setFileType(fileType);
saveFile.setFilePath(savePath);
fileService.saveFile(saveFile);
return JsonData.buildSuccess();
}
}
//文件下载
@GetMapping("down")
public ResponseEntity downFile(@RequestParam Integer id) throws MalformedURLException, UnsupportedEncodingException {
//首先根据id,从数据库获取文件信息
File downFile=fileService.selectFileById(id);
if (downFile!=null){
String path= downFile.getFilePath();
//本地路径地址转为url编码路径
URI urlPath= Paths.get(path).toUri();
Resource resource=new UrlResource(urlPath);
if (resource.exists()){
HttpHeaders headers=new HttpHeaders();
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") + "\"");
return ResponseEntity.ok().headers(headers).body(resource);
}
}
return ResponseEntity.notFound().build();
}
🌟最终测试
文件上传
数据库成功保存并且本地路径也有当前文件
文件下载
🌟写在最后
有关于SpringBoot实现文件上传、下载功能到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。文章来源:https://www.toymoban.com/news/detail-654720.html
文章来源地址https://www.toymoban.com/news/detail-654720.html
到了这里,关于一张图带你学会入门级别的SpringBoot实现文件上传、下载功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!