springboot+web文件上传和下载
一、首先安装mysql数据库,开启web服务器。
二、pom.xml文件依赖包配置如下:
<?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 http://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.1.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.weChat</groupId><artifactId>SmallProject</artifactId><version>0.0.1-SNAPSHOT</version><name>SmallProject</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-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
二、使用IDE建立springboot+web工程,连接数据库的application.properties配置如下:
1 #服务器端口设置2 server.port=80803 #必须包含项目名称4 #server.servlet.context-path=/demo5 #数据库配置信息6 spring.datasource.driver-class-name=com.mysql.jdbc.Driver7 spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false8 spring.datasource.username=root9 spring.datasource.password=****** 10 #设置单个上传文件的大小 11 spring.servlet.multipart.max-file-size=200GB 12 #设置一次请求上传文件的总量 13 spring.servlet.multipart.max-request-size=200GB 14 spring.jpa.hibernate.ddl-auto=update 15 spring.jpa.show-sql=true
三、建立数据库表格的Test.java内容如下:
1 package com.wechat.smallproject.dataBaseTable; 2 3 import javax.persistence.Column; 4 import javax.persistence.Entity; 5 import javax.persistence.Id; 6 import javax.persistence.Table; 7 import java.util.Date; 8 9 /** 10 * @Author CFF 11 * @Date:Created in 16:25 2019/1/10 12 */ 13 @Table(name = "picture_info") 14 @Entity 15 public class Test { 16 @Id 17 /** 18 * 主键ID 19 */ 20 @Column(length = 32) 21 private Integer Id; 22 /** 23 * 图片名称 24 */ 25 private String pictureName; 26 /** 27 * 图片格式 28 */ 29 private String pictureFormat; 30 /** 31 * 图片上传存放地址 32 */ 33 private String picturePath; 34 /** 35 * 图片上传大小 36 */ 37 private long pictureSize; 38 /** 39 * 上传图片时间 40 */ 41 private Date uploadPictureTime; 42 43 public Integer getId() { 44 return Id; 45 } 46 47 public void setId(Integer id) { 48 Id = id; 49 } 50 51 public String getPictureName() { 52 return pictureName; 53 } 54 55 public void setPictureName(String pictureName) { 56 this.pictureName = pictureName; 57 } 58 59 public String getPictureFormat() { 60 return pictureFormat; 61 } 62 63 public void setPictureFormat(String pictureFormat) { 64 this.pictureFormat = pictureFormat; 65 } 66 67 public String getPicturePath() { 68 return picturePath; 69 } 70 71 public void setPicturePath(String picturePath) { 72 this.picturePath = picturePath; 73 } 74 75 public long getPictureSize() { 76 return pictureSize; 77 } 78 79 public void setPictureSize(long pictureSize) { 80 this.pictureSize = pictureSize; 81 } 82 83 public Date getUploadPictureTime() { 84 return uploadPictureTime; 85 } 86 87 public void setUploadPictureTime(Date uploadPictureTime) { 88 this.uploadPictureTime = uploadPictureTime; 89 } 90 91 }
四、建立TestDao.java接口,用来保存数据库表信息:
1 package com.wechat.smallproject.dao; 2 3 import com.wechat.smallproject.dataBaseTable.Test; 4 import org.springframework.data.jpa.repository.JpaRepository; 5 6 /** 7 * @Author CFF 8 * @Date:Created in 16:45 2019/1/10 9 */ 10 public interface TestDao extends JpaRepository<Test,Integer> { 11 }
五、建立TestController.java,编写文件上传和下载方法。
1 package com.wechat.smallproject.controller; 2 3 import com.wechat.smallproject.dao.TestDao; 4 import com.wechat.smallproject.dataBaseTable.Test; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.web.bind.annotation.*; 7 import org.springframework.web.multipart.MultipartFile; 8 import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest; 9 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 import java.io.*; 13 import java.text.SimpleDateFormat; 14 import java.util.*; 15 16 /** 17 * @Author CFF 18 * @Date:Created in 16:47 2019/1/10 19 */ 20 @RestController 21 public class TestController { 22 @Autowired 23 TestDao testDao; 24 25 public String pictureName=null ; 26 public String picturePath=null ; 27 28 @RequestMapping(value = "/upload") 29 public void uploadPicture(HttpServletRequest request) throws Exception { 30 //获取文件需要上传到的路径 31 picturePath = "C:\\Users\\CFF\\Desktop\\Project\\PicturesPath\\"; 32 33 // 判断存放上传文件的目录是否存在(不存在则创建) 34 File dir = new File(picturePath); 35 if (!dir.exists()) { 36 dir.mkdir(); 37 } 38 try { 39 StandardMultipartHttpServletRequest req = (StandardMultipartHttpServletRequest) request; 40 //获取formdata的值 41 Iterator<String> iterator = req.getFileNames(); 42 while (iterator.hasNext()) { 43 MultipartFile file=req.getFile(iterator.next()); 44 //获取文件后缀名 45 String fileSuffixName=file.getOriginalFilename().substring(86); 46 //真正写到磁盘上 47 //全球唯一id 48 String uuid= UUID.randomUUID().toString().replace("-",""); 49 pictureName=uuid+fileSuffixName; 50 //将文件信息存入数据库中 51 Test test =new Test(); 52 if(new Date().hashCode()<0){ 53 test.setId(-new Date().hashCode()); 54 } 55 else{ 56 test.setId(new Date().hashCode()); 57 } 58 test.setUploadPictureTime(new Date()); 59 test.setPictureName(uuid); 60 test.setPicturePath(picturePath+pictureName); 61 test.setPictureSize(file.getSize()); 62 test.setPictureFormat(file.getContentType()); 63 testDao.save(test); 64 65 File file1=new File(picturePath+pictureName); 66 OutputStream out=new FileOutputStream(file1); 67 out.write(file.getBytes()); 68 out.close(); 69 System.out.println("图片上传成功!"); 70 } 71 } catch (Exception e) { 72 System.out.println(e); 73 } 74 } 75 //文件下载相关代码 76 @RequestMapping("/download") 77 public void fileDownload( HttpServletResponse response){ 78 File file = new File(picturePath+pictureName); 79 if (pictureName != null) { 80 if (file.exists()) { 81 response.setContentType("application/force-download");// 设置强制下载不打开 82 Date currentTime = new Date(); 83 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); 84 String dataTime=dateFormat.format(currentTime); 85 //文件重新命名 86 String pictureNewName = dataTime+pictureName.substring(pictureName.indexOf(".")); 87 response.addHeader("Content-Disposition", 88 "attachment;fileName=" + pictureNewName);// 设置文件名 89 byte[] buffer = new byte[1024]; 90 FileInputStream fis = null; 91 BufferedInputStream bis = null; 92 try { 93 fis = new FileInputStream(file); 94 bis = new BufferedInputStream(fis); 95 OutputStream os = response.getOutputStream(); 96 int i = bis.read(buffer); 97 while (i != -1) { 98 os.write(buffer, 0, i); 99 i = bis.read(buffer); 100 } 101 System.out.println(pictureNewName+"下载成功!!!"); 102 } catch (Exception e) { 103 e.printStackTrace(); 104 System.out.println(pictureNewName+"下载失败!!!"+e); 105 } finally { 106 if (bis != null) { 107 try { 108 bis.close(); 109 } catch (IOException e) { 110 e.printStackTrace(); 111 } 112 } 113 if (fis != null) { 114 try { 115 fis.close(); 116 } catch (IOException e) { 117 e.printStackTrace(); 118 } 119 } 120 } 121 } 122 } 123 } 124 }
六、upload.html如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <title>上传图片</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 6 </head> 7 <body> 8 <form action="/upload" method="post" enctype="multipart/form-data"> 9 文件:<input type="file" name="filename"/> 10 <input type="submit" value="提交"/> 11 </form> 12 <a href="/download">下载</a> 13 </body> 14 </html>
转载于:https://www.cnblogs.com/chenfeifen/p/10261980.html
springboot+web文件上传和下载相关推荐
- 微信小程序+SpringBoot实现文件上传与下载
微信小程序+SpringBoot实现文件上传与下载 1.文件上传 1.1 后端部分 1.1.1 引入Apache Commons FIleUpload组件依赖 1.1.2 设置上传文件大小限制 1.1 ...
- 一篇文章教你学会使用SpringBoot实现文件上传和下载
文章目录 一.搭建SpringBoot开发环境 1.创建项目 2.配置application.properties参数 3.实体响应类和异常信息类 4.创建FileController 二.接口测试 ...
- SpringBoot实现文件上传和下载
文件上传需要使用到 MultipartResolver接口. Spring MVC 使用 MultipartResolver接口的实现类:CommonsMultipartResolver .Commo ...
- SpringBoot下文件上传与下载的实现
原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...
- java web 文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直 ...
- java图片上传下载_java web 文件上传与下载
组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...
- asp.net coree文件上传与下载实例
asp.net core像springboot非常相似,我们从一个springboot文件上传与下载的例子来引到asp.net core的文件上传与下载: 本文asp.net core版本为:6.0 ...
- SpringBoot图文教程4—SpringBoot 实现文件上传下载(亲测)
SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」 SpringBoot图文教程2-日志的使用「logback」「log4j」 Spring ...
- springboot改文件头_SpringBoot图文教程4—SpringBoot 实现文件上传下载
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
最新文章
- 项目四-用循环求(1)
- java中Collections的接口及类层次图
- was web 服务器性能测试,was web 服务器性能测试
- [视频教程] 如何在docker环境下的纯净ubuntu系统中安装最新版nginx
- linux64 溢出,64位Linux下的栈溢出
- win7 右键增加打开 powershell选项
- EPOLLOUT/EPOLLIN事件触发的条件
- mysql 授权 失败_完美解决mysql客户端授权后连接失败的问题
- 21.5 英寸 iMac 供应减少:是新品发布的节奏吗?
- python归并排序算法实现_排序算法之归并排序(附 Python 与 JS 实现)
- C语言实战之猜拳游戏
- bootstrap EF_Bootstrap优秀模板INSPINIA.2.9.2
- url中文转码问题(python)
- linux操作系统期末试卷及答案,Linux操作系统期末复习题(含答案).pdf
- PyTorch深度学习(B站刘二大爷)第九讲作业 Otto Group Product Classification
- 如何合并多个PDF文件?这几个小妙招快来码住吧
- 用CSS制作大背景网站,以及80个大背景图片网站。
- amd64的镜像兼容amd和intel的cpu
- 多径效应和多普勒效应
- 03 数据载入、存储及文件格式
热门文章
- LeetCode:完全平方数【279】【DP】
- Ubuntu下好的PDF阅读器介绍
- ssh连接局域网内两台主机
- Tensorflow(r1.4)API--tf.nn.max_pool
- 论文解读——An Analysis of Scale Invariance in Object Detection – SNIP
- 【C++笔记】构造函数与析构函数相关知识
- a和a的区别、二维数组的本质及多维数组
- 加一条平行于y轴的直线_为什么龙门式桁架机器人采用V型导向滚轮直线导轨
- python下列数据中不属于字符串的是_下列数据中,不属于字符串的是( )。 (6.0分)_学小易找答案...
- qq浏览器网页翻译_在线英文翻译、文档翻译,这几款翻译工具你值得拥有