1.创建工程
(1)创建一个springmvc工程需要
<1>spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
(2)为例能够上传文件在服务器,需要在web.xml中加入标签做相关的配置
<1>但在sringboot 工程中,它已经为你自动做了,所以不需要做任何的配置
2.application.properties文件中相关配置
(1)取消模板文件缓存:spring.thymeleaf.cache=false
(2)单个文件大小:multipart.maxFileSize=50Mb
(3)所以文件的大小:multipart.maxRequestSize=100Mb
3.创建配置类
(1)代码示例如下:
@Configuration
public class MultipartConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize("10240KB");
/// 设置总上传数据总大小
factory.setMaxRequestSize("102400KB");
return factory.createMultipartConfig();}}
(2)springboot在启动的时候,扫描到这个类就会进行相应配置的修改
4.SpringBoot中CSS、JS、HTML存放在java\main\resources文件夹下
(1)目录结构为:
5.编写模板文件html
(1)file.html
<body>
<h1 th:inlines="text">文件上传</h1>
<form action="fileUpload" method="post" enctype="multipart/form-data">
<p>选择文件: <input type="file" name="fileName"/></p>
<p><input type="submit" value="提交"/></p>
</form>
</body>
(2)multifile.html
<body>
<h1 th:inlines="text">文件上传</h1>
<form action="multifileUpload" method="post" enctype="multipart/form-data" >
<p>选择文件1: <input type="file" name="fileName"/></p>
<p>选择文件2: <input type="file" name="fileName"/></p>
<p>选择文件3: <input type="file" name="fileName"/></p>
<p><input type="submit" value="提交"/></p>
</form>
</body>
6.编写Controller:文件上传
@Controller
public class FileUploadController {
/*
* 获取file.html页面
*/
@RequestMapping("file")
public String file(){
return "/file";}
/**
* 实现文件上传
* */
@RequestMapping("fileUpload")
@ResponseBody
public String fileUpload(@RequestParam("fileName") MultipartFile file){if(file.isEmpty()){return "false";}
String fileName = file.getOriginalFilename();
int size = (int) file.getSize();
System.out.println(fileName + "-->" + size);
String path = "F:/test" ;
File dest = new File(path + "/" + fileName);
if(!dest.getParentFile().exists()){ //判断文件父目录是否存在
dest.getParentFile().mkdir();}
try {file.transferTo(dest); //保存文件
return "true";
} catch (IllegalStateException e) {
e.printStackTrace();return "false";
} catch (IOException e) {
e.printStackTrace();return "false";}}
/*
* 获取multifile.html页面
*/
@RequestMapping("multifile")
public String multifile(){return "/multifile";}
/**
* 实现多文件上传
* */
@RequestMapping(value="multifileUpload",method=RequestMethod.POST)
/**public @ResponseBody String multifileUpload(@RequestParam("fileName")List<MultipartFile> files) */
public @ResponseBody String multifileUpload(HttpServletRequest request){
List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("fileName");
if(files.isEmpty()){return "false";}
String path = "F:/test" ;
for(MultipartFile file:files){
String fileName = file.getOriginalFilename();
int size = (int) file.getSize();
System.out.println(fileName + "-->" + size);
if(file.isEmpty()){
return "false";}else{File dest = new File(path + "/" + fileName);
if(!dest.getParentFile().exists()){ //判断文件父目录是否存在
dest.getParentFile().mkdir();
}try {file.transferTo(dest);}catch (Exception e) {
e.printStackTrace();return "false";}}}return "true";}}
7.编写Controller:文件下载
@RequestMapping("/download")
public String downLoad(HttpServletResponse response) throws UnsupportedEncodingException {
String filename="2.xlsx";
String filePath = "D:/download" ;
File file = new File(filePath + "/" + filename);
if(file.exists()){ //判断文件父目录是否存在
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
// response.setContentType("application/force-download");
response.setHeader("Content-Disposition", "attachment;fileName=" + java.net.URLEncoder.encode(filename,"UTF-8"));
byte[] buffer = new byte[1024];
FileInputStream fis = null; //文件输入流
BufferedInputStream bis = null;
OutputStream os = null; //输出流
try {
os = response.getOutputStream();
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
while(i != -1){
os.write(buffer);
i = bis.read(buffer);
}} catch (Exception e) {
e.printStackTrace();}
System.out.println("----------file download---" + filename);
try {bis.close();fis.close();}
catch (IOException e) {e.printStackTrace();}}return null;}