一、项目说明
项目环境:jdk1.8+tomcat8+idea2018
源代码github地址:
实现目标:springBoot默认的文件上传是通过StandardServletMultipartResoler实现的,同时StandardServletMultipartResoler是基于servlet3.0来处理multipart请求的,tomcat7就开始支持servlet3.0了,所以springBoot实现文件上传非常的方便。这里将通过具体的实例完成多文件的上传与预览。
二、整合说明
(1)通过idea等方式创建springBoot模板项目
(2)在static下创建文件上传页面upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>多文件上传</title>
</head>
<body>
<fieldset>
<legend>多文件上传</legend>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="files" value="请选择上传的文件" multiple="multiple">
<input type="file" name="files" value="请选择上传的文件" multiple="multiple"><br><br>
<input type="submit" value="确定">
</form>
</fieldset>
</body>
</html>
(3)在controller下创建UploadController
package com.example.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@RestController
public class UploadController {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
@PostMapping("/upload")
public String uploadFile(MultipartFile[] files, HttpServletRequest request){
String realPath = request.getSession().getServletContext().getRealPath("/uploadFile");
String date = sdf.format(new Date());
//创建文件夹
File folder = new File(realPath + date);
if(!folder.isDirectory()){
folder.mkdirs();
}
//遍历多文件
List<String> filePathList = new ArrayList<>();
try {
for (int i = 0; i < files.length; i++) {
MultipartFile file = files[i];
//获取上传的文件名称
String oldName = file.getOriginalFilename();
//创建新文件名称
String newName = UUID.randomUUID().toString() + oldName;
//将上传的文件写入到指定的位置
file.transferTo(new File(folder, newName));
String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/uploadFile" + date + "/" + newName;
filePathList.add(filePath);
}
//返回上传后的文件路径
return filePathList.toString();
} catch (IOException e) {
e.printStackTrace();
}
return "文件上传失败";
}
}
(4)在application.yaml配置文件中添加相关配置
spring:
servlet:
multipart:
enabled: true #是否开启文件上传
file-size-threshold: 0 #文件写入磁盘的阀值
location: D:\\logs #上传的文件临时保存的位置
max-file-size: 1MB #上传的单个文件的最大大小
max-request-size: 10MB #上传的所有文件的总大小
resolve-lazily: false #是否延迟解析
(5)文件上传与预览