1.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>
</head>
<body>
<h1 th:inlines="text">文件上传</h1>
<form action="fileUpload" method="post" enctype="multipart/form-data">
接受路径:<input type="text" name="path">
<p>选择文件: <input type="file" name="fileName"/></p>
<p><input type="submit" value="提交"/></p>
</form>
<h1 th:inlines="text">文件下载</h1>
<form action="download" method="post">
文件名称:<input type="text" name="filename">
文件目录:<input type="text" name="filePath">
<input type="submit" value="下载">
</form>
</body>
</html>
2.controller
package com.knowology.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* @ProjectName: upload
* @Package: com.example.upload.controler
* @ClassName: FileUploadController
* @Author: 韩惠德
* @Description:
* @Date: 2020/2/19 10:30
* @Version: 1.0
*/
@Controller
public class FileUploadController {
/*
* 获取file.html页面
*/
@RequestMapping("file")
public String file() {
return "file";
}
/**
* 实现文件上传
*/
@RequestMapping("fileUpload")
@ResponseBody
public String fileUpload(@RequestParam("fileName") MultipartFile file, @RequestParam("path") String path) {
if (file.isEmpty()) {
return "false";
}
String fileName = file.getOriginalFilename();
int size = (int) file.getSize();
System.out.println(fileName + "-->" + size);
File dest = new File(path + "/" + fileName);
if (!dest.getParentFile().exists()) { //判断文件父目录是否存在
dest.getParentFile().mkdir();
}
try {
file.transferTo(dest); //保存文件
return "true";
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "false";
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "false";
}
}
@RequestMapping("multifile")
public String multifile() {
return "/multifile";
}
@RequestMapping("download")
public void download(HttpServletResponse response, String filename, String filePath) throws Exception {
// 文件地址,真实环境是存放在数据库中的
File file = new File(filePath + "/" + filename); // 穿件输入对象
FileInputStream fis = new FileInputStream(file);
// 设置相关格式
response.setContentType("application/force-download");
// 设置下载后的文件名以及header
response.addHeader("Content-disposition", "attachment;fileName=" + filename);
// 创建输出对象
OutputStream os = response.getOutputStream();
// 常规操作
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf)) != -1) {
os.write(buf, 0, len);
}
fis.close();
}
}
3.config
package com.knowology.config;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;
/**
* @ProjectName: upload
* @Package: com.example.upload.config
* @ClassName: FileConfig
* @Author: 韩惠德
* @Description:
* @Date: 2020/2/19 10:35
* @Version: 1.0
*/
@Configuration
public class FileConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize(DataSize.ofMegabytes(500)); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.ofMegabytes(500));
return factory.createMultipartConfig();
}
}
4.pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
5.yml
multipart:
maxRequestSize: 500Mb
maxFileSize: 500Mb
spring:
thymeleaf:
mode: HTML5
cache: false
prefix: classpath:/templates/
servlet:
content-type: text/html
encoding: UTF-8
suffix: .html