Git仓库
https://gitee.com/Lin_DH/system
文件上传
可参考上一篇【SpringBoot】16 文件上传(Thymeleaf + MySQL) https://blog.csdn.net/weixin_44088274/article/details/143004298
介绍
文件上传是指将本地的图片、视频、音频等文件上传到服务器,供其他用户浏览下载的过程,文件上传在日常项目中用的非常广泛。
实现代码
第一步:在配置文件新增如下配置
application.yml
spring:
servlet:
multipart:
max-file-size: 10MB #默认为1MB
max-request-size: 10MB #默认为10MB
file:
upload:
path: F:/files/
第二步:编写文件上传页面
multiFileUpload.html
<!DOCTYPE html>
<html lang="en">
<head lang="en">
<meta charset="UTF-8" />
<title>多文件上传页面</title>
</head>
<body>
<h1>多文件上传页面</h1>
<form method="post" action="/multiFileUpload" enctype="multipart/form-data">
文件1:<input type="file" name="files"><br>
文件2:<input type="file" name="files"><br>
<hr>
<input type="submit" value="提交">
</form>
</body>
</html>
第三步:编写新增的访问接口
FileController.java
package com.lm.system.controller;
import com.lm.system.exception.FileException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
/**
* @author DUHAOLIN
* @date 2024/10/15
*/
@Controller
public class FileController {
private final static String FILE_FORMAT_TXT = ".txt";
@Value("${file.upload.path}")
private String path;
private void checkFile(MultipartFile file) {
//校验文件大小
if (file.getSize() > 10485760L) //10MB
throw new RuntimeException("文件大于10MB");
//校验文件名
checkFilename(file.getOriginalFilename());
}
private void checkFilename(String filename) {
if (!StringUtils.hasText(filename))
throw new FileException("文件名有误");
if (!filename.endsWith(FILE_FORMAT_TXT))
throw new FileException("文件类型有误");
}
@GetMapping("multiFileUploadPage")
public String multiFileUploadPage() {
return "multiFileUpload";
}
@PostMapping("multiFileUpload")
@ResponseBody
public String multiFileUpload(@RequestParam("files") MultipartFile[] files) throws IOException {
StringBuilder sb = new StringBuilder();
for (MultipartFile file : files) {
//校验文件
boolean b = true;
try {
checkFile(file);
} catch (FileException e) {
e.printStackTrace();
sb.append(file.getOriginalFilename()).append(e.getMessage()).append("<br>");
b = false;
}
if (b) { //文件格式不对则不进行上传
String filename = path + file.getOriginalFilename().replace(FILE_FORMAT_TXT, "_" + System.currentTimeMillis() + FILE_FORMAT_TXT);
File newFile = new File(filename);
Files.copy(file.getInputStream(), newFile.toPath());
sb.append("新文件已生成,").append(newFile.getAbsolutePath()).append("<br>");
}
}
return sb.toString();
}
}
效果图
上传文件中有一个文件格式不正确,则只上传正确的文件,错误的文件不上传,并且提示错误信息。
正确上传多个txt格式文件