zoukankan      html  css  js  c++  java
  • (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

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

    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 进行测试。

    Spring Boot 系列博客】

    0)前言【从零开始学Spring Boot :

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

    1spring boot起步之Hello World【从零开始学Spring Boot:

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

    2Spring Boot返回json数据【从零开始学Spring Boot

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

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

    http://412887952-qq-com.iteye.com/blogs/2292376

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

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

     

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

  • 相关阅读:
    ElasticSearch 查询语法
    自定义的带tab的可左右滑动的viewpager之二viewpager与fragment不兼容
    QT5 串口收发实例代码
    Communications link failure报错的处理
    mac 环境下mysql 不能删除schema问题的解决办法
    [置顶] How to dump redo log entry?
    pjsip视频通信开发(上层应用)之拨号界面整体界面功能实现
    windows command ftp 中文文件名乱码解决方法
    (字符串的模式匹配4.7.18)POJ 2406 Power Strings(求一个字符串的最小重复串)
    通过程序 VB.Net 或 C# 读取文本文件行数
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147114.html
Copyright © 2011-2022 走看看