李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
基于SpringBoot的文件上传和下载
Leefs
2020-01-17 PM
1756℃
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://www.lilinchao.com/archives/436.html
上一篇
容器深入研究--理解Map
下一篇
Jenkins安装
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Docker
Java
JavaScript
RSA加解密
DataWarehouse
字符串
Shiro
Scala
Java工具类
Golang
锁
正则表达式
Yarn
Azkaban
Http
数学
国产数据库改造
LeetCode刷题
队列
Hive
Spark RDD
Netty
nginx
Java阻塞队列
Spark Core
Tomcat
JavaSE
Spark
CentOS
SpringBoot
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞