李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
基于SpringBoot的文件上传和下载
Leefs
2020-01-17 PM
2158℃
0条
# 基于SpringBoot的文件上传和下载 ### 1. 创建SpringBoot项目 略 ### 2. 在pom.xml文件中添加依赖 ```xml
commons-fileupload
commons-fileupload
1.3.1
``` ### 3. 编辑application.properties文件 在application.properties文件里添加如下内容 ```properties spring.servlet.multipart.file-size-threshold=0B #文件大小阈值,当大于这个阈值时将写入到磁盘,否则在内存中。默认值为0 spring.servlet.multipart.max-request-size=100MB #设置上传文件总大小为100MB spring.servlet.multipart.max-file-size=100MB ``` ### 4. 文件上传 #### 4.1 文件上传Controller层的代码 ```java /*** * File.separator:这个代表系统目录中的间隔符,说白了就是斜线,不过有时候需要双线,有时候是单线,你用这个静态变量就解决兼容问题了。 * */ @Controller @RequestMapping("/index") public class FileController { //上传文件路径 private static String parentPath = "F:"+ File.separator+"filepload"; @RequestMapping("/upload") public String upload(){ return "uploadto"; } @RequestMapping(value="/upload",method = RequestMethod.POST) @ResponseBody public String upload(@RequestParam("file")MultipartFile file){ //判断上传文件是否为空,若为空则返回错误信息 if(file.isEmpty()){ return "上传失败"; }else{ File filePath = new File(parentPath); if(!filePath.exists()){//如果文件路径不存在则创建一个 filePath.mkdir(); } //获取文件原名 String originalFileName = file.getOriginalFilename(); System.out.println(originalFileName); //获取源文件前缀 String fileNamePrefix = originalFileName.substring(0,originalFileName.lastIndexOf(".")); //获取源文件后缀 String fileNameSuffix = originalFileName.substring(originalFileName.lastIndexOf(".")); //将源文件前缀之后加上时间戳避免重名 String newFileNamePrefix = fileNamePrefix+new Date().getTime(); //得到上传后新文件的文件名 String newFileName = newFileNamePrefix+fileNameSuffix; //创建一个新的File对象用于存放上传的文件 File fileNew = new File(parentPath+File.separator+newFileName); try { file.transferTo(fileNew); } catch (IOException e) { e.printStackTrace(); } } return "上传成功"; } } ``` #### 4.2 文件上传的html代码 ```html
单文件上传
``` 启动程序,打开浏览器输入http://localhost:8080/index/upload地址进行测试 ![基于SpringBoot的文件上传和下载01.png][1] 选择需要上传的文件进行上传提交。 ![基于SpringBoot的文件上传和下载02.png][2] 在去本地对应的目录文件下去寻找对应上传文件。 ### 5. 文件下载 #### 5.1 文件下载Controller层代码 ```java //文件下载 @RequestMapping(value="/download",method=RequestMethod.GET) public void download(HttpServletResponse response){ //通过response输出流将文件传递到浏览器 //1. 获取文件路径 String fileName = "ContOS7IP配置031579091691888.png"; //2.构建一个文件通过Paths工具类获取一个Path对象 Path path = Paths.get(parentPath,fileName); //判断文件是否存在 if (Files.exists(path)) { //存在则下载 //通过response设定他的响应类型 //4.获取文件的后缀名 String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1); // 5.设置contentType ,只有指定contentType才能下载 response.setContentType("application/" + fileSuffix); // 6.添加http头信息 // 因为fileName的编码格式是UTF-8 但是http头信息只识别 ISO8859-1 的编码格式 // 因此要对fileName重新编码 try { response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "ISO8859-1")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 7.使用 Path 和response输出流将文件输出到浏览器 try { Files.copy(path, response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } } ``` #### 5.2 浏览器进行测试 在浏览器中输入如下地址http://localhost:8080/index/download 测试如果有文件进行正常下载,说明接口没问题。 ### 6. 文件批量上传 #### 6.1 Controller层代码 ```java //多文件上传 @RequestMapping(value = "/uploads",method=RequestMethod.POST) @ResponseBody public String uploadTwo(@RequestParam("files")MultipartFile[] files){ //判断上传文件是否为空,若为空则返回错误信息 if(files.length== 0 || files.length<1){ System.out.println("files========"); } System.out.println("files.length====="+files.length); for(MultipartFile file:files){ if(file.isEmpty()){ return "上传失败"; } File filePath = new File(parentPath); if(!filePath.exists()){//如果文件路径不存在则创建一个 filePath.mkdir(); } //获取文件原名 String originalFileName = file.getOriginalFilename(); System.out.println(originalFileName); //获取源文件前缀 String fileNamePrefix = originalFileName.substring(0,originalFileName.lastIndexOf(".")); //获取源文件后缀 String fileNameSuffix = originalFileName.substring(originalFileName.lastIndexOf(".")); //将源文件前缀之后加上时间戳避免重名 String newFileNamePrefix = fileNamePrefix+new Date().getTime(); //得到上传后新文件的文件名 String newFileName = newFileNamePrefix+fileNameSuffix; //创建一个新的File对象用于存放上传的文件 File fileNew = new File(parentPath+File.separator+newFileName); try { file.transferTo(fileNew); } catch (IOException e) { e.printStackTrace(); } } return "上传成功"; } ``` #### 6.2 前端html页面代码 ```
单文件上传
``` 访问如下路径,进入到如下页面 http://localhost:8080/index/upload ![基于SpringBoot的文件上传和下载03.png][3] 选择两个文件点击提交按钮,上传测试操作 大家可以对比一下添加和批量添加,这样会让你印象更深刻。 *附:[参考文章链接](http://www.pianshen.com/article/2412113065/)* [1]: https://lilinchao.com/usr/uploads/2020/01/2170232290.png [2]: https://lilinchao.com/usr/uploads/2020/01/3507298602.png [3]: https://lilinchao.com/usr/uploads/2020/01/3063404579.png
标签:
Java
,
SpringBoot
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/436.html
上一篇
容器深入研究--理解Map
下一篇
Jenkins安装
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
哈希表
Spark SQL
字符串
设计模式
工具
Jquery
Golang
JavaScript
gorm
SQL练习题
排序
Sentinel
Beego
Livy
JavaWeb
SpringCloudAlibaba
Shiro
MyBatis
Eclipse
Hbase
BurpSuite
国产数据库改造
DataX
ClickHouse
Python
并发编程
算法
机器学习
持有对象
Hadoop
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭