`

29. Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

阅读更多

 à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

网易云课堂视频最新更新

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

3、Spring Boot日志-log4j2

第十二章 Spring Boot 知识点2

1、spring boot 服务配置和部署

2、Spring Boot 定制URL匹配规则

 

 

 

 

       文件上传主要分以下几个步骤

1)新建maven java project

2)在pom.xml加入相应依赖;

3)新建一个表单页面(这里使用thymleaf;

4)编写controller;

5)测试;

6)对上传的文件做一些限制;

7)多文件上传实现

 

 

1)新建maven java project

新建一个名称为spring-boot-fileupload maven java项目;

 

 

2)在pom.xml加入相应依赖;

加入相应的maven依赖,具体看以下解释:

<!--

       spring boot 父节点依赖,

       引入这个之后相关的引入就不需要添加version配置,

       spring boot会自动选择最合适的版本进行添加。

     -->

    <parent>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-parent</artifactId>

       <version>1.3.3.RELEASE</version>

    </parent>

  <dependencies>

        <!-- spring boot web支持:mvc,aop... -->

       <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-web</artifactId>

       </dependency>

       <!-- thmleaf模板依赖. -->

       <dependency>

         <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-starter-thymeleaf</artifactId>

       </dependency>

  </dependencies>

    <build>

       <plugins>

           <!-- 编译版本; -->

           <plugin>

              <artifactId>maven-compiler-plugin</artifactId>

              <configuration>

                  <source>1.8</source>

                  <target>1.8</target>

              </configuration>

           </plugin>

       </plugins>

    </build>

 

3)新建一个表单页面(这里使用thymleaf

src/main/resouces新建templates(如果看过博主之前的文章,应该知道,templatesspring boot存放模板文件的路径),在templates下新建一个file.html:

 

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"

      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

    <head>

        <title>Hello World!</title>

    </head>

    <body>

       <form method="POST" enctype="multipart/form-data" action="/upload"> 

           <p>文件:<input type="file" name="file" /></p>

           <p><input type="submit" value="上传" /></p>

       </form>

    </body>

</html>

 

4)编写controller;

       编写controller进行测试,这里主要实现两个方法:其一就是提供访问的/file路径;其二就是提供post上传的/upload方法,具体看代码实现:

package com.kfit;

 

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

 

@Controller

publicclass FileUploadController {

   

    //访问路径为:http://127.0.0.1:8080/file

    @RequestMapping("/file")

    public String file(){

       return"/file";

    }

   

    /**

     * 文件上传具体实现方法;

     * @param file

     * @return

     */

    @RequestMapping("/upload")

    @ResponseBody

    public String handleFileUpload(@RequestParam("file")MultipartFile file){

       if(!file.isEmpty()){

           try {

              /*

               * 这段代码执行完毕之后,图片上传到了工程的跟路径;

               * 大家自己扩散下思维,如果我们想把图片上传到 d:/files大家是否能实现呢?

               * 等等;

               * 这里只是简单一个例子,请自行参考,融入到实际中可能需要大家自己做一些思考,比如:

               * 1、文件路径;

               * 2、文件名;

               * 3、文件格式;

               * 4、文件大小的限制;

               */

              BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));

              out.write(file.getBytes());

              out.flush();

              out.close();

           } catch (FileNotFoundException e) {

              e.printStackTrace();

              return"上传失败,"+e.getMessage();

           } catch (IOException e) {

              e.printStackTrace();

              return"上传失败,"+e.getMessage();

           }

           return"上传成功";

       }else{

           return"上传失败,因为文件是空的.";

       }

    }

}

 

5)编写App.java然后测试

       App.java没什么代码,就是Spring Boot的启动配置,具体如下:

package com.kfit;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

/**

 * Hello world!

 *

 */

//其中@SpringBootApplication申明让spring boot自动给程序进行必要的配置,等价于以默认属性使用@Configuration@EnableAutoConfiguration@ComponentScan

@SpringBootApplication

publicclass App {

   

   

    publicstaticvoid main(String[] args) {

       SpringApplication.run(App.class, args);

    }

}

 

然后你就可以访问:http://127.0.0.1:8080/file 进行测试了,文件上传的路径是在工程的跟路径下,请刷新查看,其它的请查看代码中的注释进行自行思考。

 

6)对上传的文件做一些限制;

 

       对文件做一些限制是有必要的,在App.java进行编码配置:

@Bean 

    public MultipartConfigElement multipartConfigElement() { 

        MultipartConfigFactory factory = new MultipartConfigFactory();

        //// 设置文件大小限制 ,超了,页面会抛出异常信息,这时候就需要进行异常信息的处理了;

        factory.setMaxFileSize("128KB"); //KB,MB

        /// 设置总上传数据总大小

        factory.setMaxRequestSize("256KB"); 

        //Sets the directory location where files will be stored.

        //factory.setLocation("路径地址");

        returnfactory.createMultipartConfig(); 

    } 

 

7)多文件上传实现

       多文件对于前段页面比较简单,具体代码实现:

src/resouces/templates/mutifile.html

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"

      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">

    <head>

        <title>Hello World!</title>

    </head>

    <body>

       <form method="POST" enctype="multipart/form-data" action="/batch/upload"> 

           <p>文件1<input type="file" name="file" /></p>

           <p>文件2<input type="file" name="file" /></p>

           <p>文件3<input type="file" name="file" /></p>

           <p><input type="submit" value="上传" /></p>

       </form>

    </body>

</html>

com.kfit.FileUploadController中新增两个方法:

/**

     * 多文件具体上传时间,主要是使用了MultipartHttpServletRequestMultipartFile

     * @param request

     * @return

     */

    @RequestMapping(value="/batch/upload", method= RequestMethod.POST) 

    public@ResponseBody 

    String handleFileUpload(HttpServletRequest request){ 

        List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file"); 

        MultipartFile file = null;

        BufferedOutputStream stream = null;

        for (inti =0; i< files.size(); ++i) { 

            file = files.get(i); 

            if (!file.isEmpty()) { 

                try { 

                    byte[] bytes = file.getBytes(); 

                    stream = 

                            new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename()))); 

                    stream.write(bytes); 

                    stream.close(); 

                } catch (Exception e) { 

                    stream =  null;

                    return"You failed to upload " + i + " => " + e.getMessage(); 

                } 

            } else { 

                return"You failed to upload " + i + " because the file was empty."; 

            } 

        } 

        return"upload successful"; 

    } 

 

访问路径:http://127.0.0.1:8080/mutifile 进行测试。

 

 

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

分享到:
评论
5 楼 林祥纤 2018-02-04  
mvnich 写道
非常感谢博主老师的无私奉献!

4 楼 mvnich 2018-02-04  
非常感谢博主老师的无私奉献!
3 楼 fengrobert 2017-03-13  
纠正一个小的case,多文件上传,直接copy代码无法访问,问题,在FileUploadController类中添加以下代码,修复:

//访问路径为:http://127.0.0.1:8080/mutifile
    @RequestMapping("/mutifile")
    public String mutifile(){
       return"/mutifile";
    }
2 楼 林祥纤 2016-06-22  
a807966224 写道
666666-喜欢


谢谢....
1 楼 a807966224 2016-06-22  
666666-喜欢

相关推荐

    从零开始学Spring Boot.pdf

    从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf从零开始学Spring Boot.pdf...

    27. Spring Boot Junit单元测试【从零开始学Spring Boot】

    Spring Boot Junit单元测试【从零开始学Spring Boot】"的主题,深入探讨Spring Boot中Junit单元测试的使用方法和最佳实践。 首先,我们要了解什么是单元测试。单元测试是一种针对软件中的最小可测试单元(如方法)...

    31. Spring Boot导入XML配置【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列教程中,我们将深入探讨如何在Spring Boot项目中导入并使用XML配置。Spring Boot以其简化Spring应用的初始搭建以及开发过程而闻名,通常推崇的是Java配置而非XML配置。然而,在...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...

    82. Spring Boot – 启动彩蛋【从零开始学Spring Boot】

    Spring Boot的启动流程涉及多个组件,包括`SpringApplication`、`ApplicationContext`等。在启动过程中,`SpringApplication.run()`方法是主要入口,它会负责加载配置、初始化上下文、处理命令行参数以及执行其他...

    38. Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】

    在Spring Boot应用中,随着系统复杂度的增加,单一服务器往往无法满足高并发、高可用的需求,因此我们会采用分布式架构。然而,在分布式环境下,传统的基于HTTP Session的状态管理方式会遇到问题,因为每个服务器都...

    47. Spring Boot发送邮件【从零开始学Spring Boot】

    在本篇博文中,我们将深入探讨如何使用Spring Boot发送电子邮件,这是Spring Boot框架的一个非常实用的功能,可以帮助开发者轻松实现企业级应用中的邮件服务。通过学习本文,你可以掌握Spring Boot集成...

    从零开始学Spring Boot

    《从零开始学Spring Boot》是一本面向初学者的Spring Boot学习书籍,旨在帮助读者快速掌握Spring Boot框架及其应用。Spring Boot是Spring的一个模块,它提供了快速开发、配置简单、独立部署和运行微服务的一系列特性...

    22. Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】

    在Spring Boot框架中,拦截器(HandlerInterceptor)是一种强大的机制,用于在请求处理前后执行自定义逻辑。...在压缩包文件"spring-boot-hello2"中,可能包含了示例代码或者完整的Spring Boot项目,供学习和实践使用。

    92.Spring Boot使用模板velocity【从零开始学Spring Boot】

    《Spring Boot整合Velocity模板引擎详解》 在现代Java Web开发中,Spring Boot以其简洁的配置、强大的功能和高效的开发效率,成为了许多开发者的首选框架。而Velocity作为一款轻量级的模板引擎,能够帮助我们快速...

    1. [视频]spring boot起步之Hello World【从零开始学Spring Boot】

    在本节中,我们将深入探讨"Spring Boot起步之Hello World"这一主题,这是学习Spring Boot框架的典型入门教程。Spring Boot是由Pivotal团队开发的一个框架,它旨在简化Spring应用程序的初始搭建以及开发过程,通过...

    15. Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列中,我们将探讨如何在Spring Boot项目中集成并配置Druid数据源以及其监控功能。Druid是一个强大的数据库连接池,它提供了丰富的监控、扩展性以及性能优化特性。Spring Boot简化...

    16. Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】

    在本篇【从零开始学Spring Boot】系列中,我们将探讨如何在Spring Boot项目中使用Druid数据源进行编程注入。Druid是一个优秀的数据库连接池,它提供了强大的监控和扩展功能,是许多企业级应用首选的数据源解决方案。...

    39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发而闻名,而Shiro则是一个轻量级的安全框架,适用于身份验证、授权、会话管理和安全性相关的...

    37. Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】

    通过自动配置和起步依赖,Spring Boot使得开发者可以快速搭建项目并开始开发。 接下来,我们讨论**EHCache**。EHCache是一款开源的、内存中的数据缓存系统,广泛用于Java应用程序中。它可以缓存对象,减少数据库...

    41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    这是Spring Boot的核心特性之一,它使得我们能够以编程方式管理对象,而无需XML配置。让我们逐步解析这个过程。 首先,了解Spring Boot的基础。Spring Boot旨在简化Spring应用程序的初始设置和配置,通过“约定优于...

Global site tag (gtag.js) - Google Analytics