一、文件上传
示例:通过form表单实现文件上传,并在后台接受
二、使用步骤
1.引入库
代码如下(示例):
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.0.2</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
2.java代码
代码如下(示例):
@RestController
public class UploadsController extends BaseController{
final String DIR = "attachment/";
/**
* 文件上传
* @param files 前端上传时文件的 参数
* @param request
* @return
*/
@PostMapping("/uploads")
public ResultBean uploads(List<MultipartFile> files, HttpServletRequest request){
Map map = new HashMap();
Iterator<MultipartFile> iterator = files.iterator();
while (iterator.hasNext()){
MultipartFile file = iterator.next();
String path = uploadFile(file, request);
map.put(file.getOriginalFilename(),path);
}
return success("上传成功!",map);
}
/**
* 上传单个文件
* @param file
* @param request
* @return
*/
@PostMapping("/upload")
public ResultBean upload(MultipartFile file,HttpServletRequest request){
String s = uploadFile(file, request);
return success("上传成功!",s);
}
/**
* 上传文件
* @param file
* @param request 路径
* @return
*/
public String uploadFile(MultipartFile file, HttpServletRequest request){
// 获取文件上传的名字
String fileName = file.getOriginalFilename();
// 获取服务器的真实路径
String path = request.getServletContext().getRealPath("/");
String mk = dateDirectory();
// 创建文件
String paths = path+DIR+mk;
File dir = new File(paths);
if (!dir.exists()){
// 创建目录
dir.mkdirs();
}
String newName = newFileName();
String end = end(file);
try {
file.transferTo(new File(dir,newName+end));
} catch (IOException e) {
throw new RuntimeException(e);
}
return DIR+mk+"/"+newName+end;
}
/**
* 日期目录 ,返回以年月为单位的目录
* @return
*/
String dateDirectory(){
String mkdir = String.format("%tF", System.currentTimeMillis());
String mk = mkdir.substring(0, mkdir.lastIndexOf("-"));
return mk;
}
/**
* 获取后缀名
* @param file
* @return
*/
String end(MultipartFile file){
String filename = file.getOriginalFilename();
return filename.substring(filename.lastIndexOf("."));
}
/**
* 获取新的名字(当前系统时间的长整型)
* @return
*/
String newFileName(){
long l = System.currentTimeMillis();
String name = String.format("%d", l);
return name;
}
}
3.form表单
<%--
Created by IntelliJ IDEA.
User: fuhua
Date: 2022/12/24
Time: 19:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="/uploads" method="post" enctype="multipart/form-data">
文件:<input type="file" name="files"><br>
文件:<input type="file" name="files"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
总结
form表单 文件上传