前言
(๑╹◡╹)ノ” 各位老铁好~
最近在写一个关于文件的上传下载的小Demo。本来打算把项目放到GitHub上的,但我仔细一想觉得核心功能就一点点,完全没必要呀。所以我就整理了一下,写个博客,贴贴核心代码,给各位老铁参考参考,如果有帮助的话,求个赞~
项目架构简单介绍下,SpringBoot写的接口,Thymeleaf写的前端,后面考虑到要前后端分离,就整了个Vue。
1. 文件上传核心代码
(1)后端接口
@PostMapping(value = "/upload")
public void uploadFile(@RequestParam("files") MultipartFile[] files) throws IOException {
// 1. 用数组MultipartFile[]来表示多文件,所以遍历数组,对其中的文件进行逐一操作
for (MultipartFile file : files) {
// 2. 通过一顿file.getXXX()的操作,获取文件信息。
// 2.1 这里用文件名举个栗子
String filename = file.getOriginalFilename();
// 3. 接下来调用方法来保存文件到本地磁盘,返回的是保存后的文件路径
String filePath = savaFileByNio((FileInputStream) file.getInputStream(), filename);
// 4. 保存文件信息到数据库
// 4.1 搞个实体类,把你需要的文件信息保存到实体类中
// 4.2 调用Service层或者Dao层,保存数据库即可。
}
}
public static String savaFileByNio(FileInputStream fis, String fileName) {
// 这个路径最后是在: 你的项目路径/FileSpace 也就是和src同级
String fileSpace = System.getProperty("user.dir") + File.separator + "FileSpace";
String path = fileSpace + File.separator + fileName;
// 判断父文件夹是否存在
File file = new File(path);
if (file.getParentFile() != null || !file.getParentFile().isDirectory()) {
file.getParentFile().mkdirs();
}
// 通过NIO保存文件到本地磁盘
try {
FileOutputStream fos = new FileOutputStream(path);
FileChannel inChannel = fis.getChannel();
FileChannel outChannel = fos.getChannel();
inChannel.transferTo(0, inChannel.size(