`

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-喜欢

相关推荐

Global site tag (gtag.js) - Google Analytics