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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linxingliang/article/details/52077816

 

【视频&交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 



 

 

 


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

(1)新建maven java project;

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

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

(4)编写controller;

(5)测试;

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

(7)多文件上传实现

(1)新建maven java project

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

 

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

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

<!--

              springboot父节点依赖,

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

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

        -->

       <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)新建一个表单页面(这里使用thymeleaf)

在src/main/resouces新建templates(如果看过博主之前的文章,应该知道,templates是spring 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;

 

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.RequestParam;

importorg.springframework.web.bind.annotation.ResponseBody;

importorg.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 StringhandleFileUpload(@RequestParam("file")MultipartFilefile){

              if(!file.isEmpty()){

                     try {

                            /*

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

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

                             *等等;

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

                             * 1、文件路径;

                             * 2、文件名;

                             * 3、文件格式;

                             * 4、文件大小的限制;

                             */

                            BufferedOutputStreamout =newBufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));

                            out.write(file.getBytes());

                            out.flush();

                            out.close();

                     }catch(FileNotFoundExceptione) {

                            e.printStackTrace();

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

                     }catch (IOExceptione) {

                            e.printStackTrace();

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

                     }

                     return "上传成功";

              }else{

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

              }

       }

}

 

(5)编写App.java然后测试

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

package com.kfit;

 

importorg.springframework.boot.SpringApplication;

importorg.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() { 

        MultipartConfigFactoryfactory =newMultipartConfigFactory();

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

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

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

        factory.setMaxRequestSize("256KB"); 

        //Sets the directory location wherefiles will be stored.

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

        returnfactory.createMultipartConfig(); 

    } 

 

(7)多文件上传实现

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

在src/resouces/templates/mutifile.html

<!DOCTYPEhtml>

<htmlxmlns="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>

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

             <p>文件1:<inputtype="file"name="file"/></p>

             <p>文件2:<inputtype="file"name="file"/></p>

             <p>文件3:<inputtype="file"name="file"/></p>

           <p><inputtype="submit"value="上传"/></p>

      </form>

   </body>

</html>

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

/**

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

        *@param request

        *@return

        */

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

   public@ResponseBody 

   String handleFileUpload(HttpServletRequestrequest){ 

        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

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

                    stream.write(bytes); 

                    stream.close(); 

                } catch (Exceptione) { 

                       streamnull;

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

                } 

            } else

                return"You failed to upload " +i + " becausethe file was empty."

            } 

        } 

        return"upload successful"

    } 

 

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

Spring Boot 系列视频】

视频&交流平台:

à Spring Boot网易云课堂视频

http://study.163.com/course/introduction.htm?courseId=1004329008

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

网易云课堂视频最新更新

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

3、Spring Boot日志-log4j2

第十二章 Spring Boot 知识点2

1、spring boot 服务配置和部署

2、Spring Boot 定制URL匹配规则

 

 

历史章节

 

第一章 快速开始

1、Spring Boot之Hello World

2、Spring Boot之Hello World访问404

 

第二章 Spring Boot之JSON

1、spring boot返回json数据

2、Spring Boot完美使用FastJson解析JSON数据

 

第三章 Spring Boot热部署

1、Spring Boot热部署(springloader)

2、springboot + devtools(热部署)

 

第四章 Spring Boot数据库

1、Spring Boot JPA/Hibernate/Spring Data概念

2、Spring Boot JPA-Hibernate

3、Spring Boot Spring Data JPA介绍

4、Spring Boot JdbcTemplate

5、Spring Boot集成MyBatis

 

第五章 web开发

1、全局异常捕捉

2、配置server信息

3、spring boot使用thymeleaf

4、Spring Boot 使用freemarker

5、Spring Boot添加JSP支持

 

第六章 定时任务

1、Spring Boot定时任务

2、Spring Boot 定时任务升级篇(动态修改cron参数)

3、Spring Boot 定时任务升级篇(动态添加修改删除定时任务)

4、Spring Boot 定时任务升级篇(集群/分布式下的定时任务说明)

5、Spring Boot Quartz介绍

6、Spring Boot Quartz在Java Project中使用

7、Spring Boot 集成Quartz普通使用

8、Spring Boot 集成Quartz升级版

9、Spring Boot 集成Quartz二次升级版

10、Spring Boot 集成Quartz-Job如何自动注入Spring容器托管的对象

 

第七章 Spring Boot MyBatis升级篇

1、Spring Boot MyBatis升级篇-注解

2、Spring Boot MyBatis升级篇-注解-自增ID

3、Spring Boot MyBatis升级篇-注解-增删改查

4、Spring Boot MyBatis升级篇-注解-分页查询

5、Spring Boot MyBatis升级篇-注解-分页PageHelper不生效

6、Spring Boot MyBatis升级篇-注解- mybatic insert异常:BindingException: Parameter 'name' not found

7、Spring Boot MyBatis升级篇-注解- #和$符号特别篇

8、Spring Boot MyBatis升级篇-注解-@Result

9、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案一:<script>

10、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider

11、Spring Boot MyBatis升级篇-注解-动态SQL-参数问题

12、Spring Boot MyBatis升级篇-注解-特别篇:@MapperScan和@Mapper

13、Spring Boot MyBatis升级篇-XML

14、Spring Boot MyBatis升级篇-XML-自增ID

15、Spring Boot MyBatis升级篇-XML-增删改查

16、Spring Boot MyBatis升级篇-XML-分页查询

17、Spring Boot MyBatis升级篇-XML-分页PageHelper不生效

18、Spring Boot MyBatis升级篇-XML-动态SQL(if test)

19、Spring Boot MyBatis升级篇-XML-注解-初尝试

20、Spring Boot MyBatis升级篇- pagehelper替换为pagehelper-spring-boot-starter

 

第八章 Spring Boot 知识点1

1、Spring Boot 拦截器HandlerInterceptor

2、Spring Boot启动加载数据CommandLineRunner

3、Spring Boot环境变量读取和属性对象的绑定

4、Spring Boot使用自定义的properties

5、Spring Boot使用自定义的properties

6、Spring Boot使用@SpringBootApplication

7、Spring Boot 监控和管理生产环境

 

第十章 Spring Boot 打包部署

1、Spring Boot打包部署((提供Linux的sh文件))

 

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

 

3、Spring Boot日志-log4j2

 

更多查看博客: http://412887952-qq-com.iteye.com/


展开阅读全文

没有更多推荐了,返回首页