spring boot实现文件的上传,
我是使用maven搭建的spring boot项目,页面集成的jsp。
页面结构如下:
准备工作:在webapp下新建一个目录叫upload
1,页面,upload.jsp
<body>
<form method="post" action="${pageContext.request.contextPath}/file/upload" enctype="multipart/form-data">
<input type="file" name="files">
<input type="submit" value="上传">
</form>
</body>
2) 控制器 ,FileController.java
@Controller
@RequestMapping("/file")
public class FileController {
private Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping("/upload")
public String upLoad(MultipartFile files, HttpSession session) throws IOException {
logger.info("upload 方法执行了");
//获取上传文件的路径
String realPath = session.getServletContext().getRealPath("upload");
System.out.println("--------"+realPath);
//获取上传的文件名,
File file1 = new File(realPath, files.getOriginalFilename());
//执行文件上传复制
files.transferTo(file1);
//跳到下载页面
return "/download.jsp";
}
}
3) 修改上传文件大小的限制,application.properties
//配置tomcat端口号
server.port=8080
//项目访问路径
server.servlet.context-path=/maven_springboot
//jsp页面热部署
server.servlet.jsp.init-parameters.development=true
//修改上传文件大小限制为10Mb
spring.servlet.multipart.max-file-size=10485760
2,下载
1) 页面 download.jsp
这里的fileName应该是要从数据库读取出来,包括上传也是应该把上传的文件信息存到数据库,这里我就不写了。
就直接把文件写死了,
<body>
<a href="${pageContext.request.contextPath}/file/download?fileName=aaa.png">下载</a>
</body>
2)控制器, FileController
@RequestMapping("/download")
public void Download(String fileName, HttpServletResponse response,HttpSession session) throws Exception {
//设置下载响应头
response.setHeader("content-disposition","attachment;fileName"+ URLEncoder.encode(fileName,"UTF-8"));
//获取文件路径
String uploadPath = session.getServletContext().getRealPath("upload");
File file = new File(uploadPath,fileName);
ServletOutputStream outputStream = response.getOutputStream();
FileUtils.copyFile(file,response.getOutputStream());
}
这里要用到一个jar包,commons-io包的FileUtils工具类,
pom引入该依赖如下:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
如此,一个简单的上传下载demo就算完成了