1.创建项目
2.pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wu</groupId>
<artifactId>tests</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>tests</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>文件上传</h1>
<form action="/uploads" method="post" enctype="multipart/form-data" >
文件上传:<input type="file" name="file" ><br/>
<input type="submit" ><br/>
</form>
<h1>文件下载</h1>
<a href="/download">下载</a>
</body>
</html>
4.写文件上传的工具类
package com.wu.tests.util;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
public class Load {
//文件上传
public String upload (MultipartFile file,String name){
if(file.isEmpty()){
return "file is empty";
}
//获取文件后缀
String fileName=file.getOriginalFilename();
String suffixName=fileName.substring(fileName.lastIndexOf("."));
//存放路径
String path="D://";
String filePath=path+name+suffixName;//重命名
File file1=new File(filePath);
try {
file.transferTo(file1);
return "成功";
} catch (IOException e) {
e.printStackTrace();
return "失败";
}
}
}
5.写controller代码
package com.wu.tests.controller;
import com.wu.tests.util.Load;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
@Controller
public class TestController {
@RequestMapping("/test")
public String test(){
return "upload";
}
//文件上传
@RequestMapping("/uploads")
@ResponseBody
public String upload(MultipartFile file) {
Load load=new Load();
String name="测试";//这个字符串应该是从数据库中查出来的运用重命名文件
return load.upload(file,name);
}
//文件下载
@RequestMapping("/download")
@ResponseBody
public String download(HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
String filename="测试.docx";//这个应该是从数据库查出来的文件名
String filePath = "D://" ;
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=" + 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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bis.close();
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "成功";
}
return "失败";
}
}
6.测试成功
如果文件上传的大小超过了2M,是上传不成功的,因为springBoot默认最大2M
可以在application.properties文件进行设置
#单个文件最大值
spring.servlet.multipart.max-file-size=1000MB
#总文件最大值
spring.servlet.multipart.max-request-size=1000MB