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=8080
 3 #必须包含项目名称
 4 #server.servlet.context-path=/demo
 5 #数据库配置信息
 6 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 7 spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false
 8 spring.datasource.username=root
 9 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

时间: 2024-11-05 21:39:39

springboot+web文件上传和下载的相关文章

web文件上传和下载

文件的上传和下载是网络编程经常出现的问题,虽然比较基础但是通常用的时候就会忘记一些细节,因此在这里将一些细节po出来. 1.文件下载 文件的下载比较简单,前端我们只需要进行一次get请求即可: 1 <button onclick='getFile();'>Import</button> 2 3 <script> 4 function getFile(){ 5 var url = "/istore/servlet/b2b/group/downloadModel.

寒假随笔4——购物系统(web文件上传与下载)

昨天写了登陆页面: 今天上午搭建完用户页面框架之后,想增加一个换头像功能,但是要求我导入jar包 如图: 本人找了一下午,终于,我找到了,哈哈哈哈,链接如下 http://blog.sina.com.cn/s/blog_1645e034e0102wtiw.html 希望对有的小伙伴有帮助. 原文地址:https://www.cnblogs.com/haheihei/p/12271457.html

SpringBoot图文教程4—SpringBoot 实现文件上传下载

有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 大哥大姐新年好,点赞转发不要少 SpringBoot 图文系列教程技术大纲 鹿老师的Java笔记 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」 SpringBoot图文教程2—日志的使用「logback」「log4j」 Sp

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

SpringBoot 文件上传、下载、设置大小

本文使用SpringBoot的版本为2.0.3.RELEASE 1.上传单个文件 ①html对应的提交表单 <form action="uploadFile" method="post" enctype="multipart/form-data"> <p>选择文件: <input type="file" name="fileName"/></p> <p&

WEB文件上传下载过程简介(基于Struts2)

WEB文件上传过程简介(基于Struts2),页面上传.Action收取.解析:文件导出 文件处理过程,需要注意对文件的定期清理,避免磁盘占用过多: 1. jsp页面:   <s:file required="true" name ="myFile" theme="zx2"/> <s:form action ="myfile.action" name="form" method =&quo

JavaWeb学习总结(五十)——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

深入分析JavaWeb Item40 -- 文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo