zoukankan      html  css  js  c++  java
  • 170706、springboot编程之文件上传

    使用thymleaf模板,自行导入依赖!

    一、单文件上传

    1、编写单文件上传页面singleFile.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>单文件上传</title>
    </head>
    <body>
        <form method="post" enctype="multipart/form-data" action="/singleUpload">
            <p>选择文件:<input type="file" name="file"/></p>
            <p><input type="submit" th:value="上传"/></p>
        </form>
    </body>
    </html>

    2、编写FileUploadController.java

    package com.rick.apps.controller;
    
    import com.rick.common.ResultJson;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    
    /**
     * Desc :  文件上传
     * User : RICK
     * Time : 2017/8/23 9:36
      */
    
    @Controller
    public class FileUploadController {
    
        /**
         * Desc :  跳转单文件上传页面
         * User : RICK
         * Time : 2017/8/23 9:37
          */
    
        @RequestMapping("/singleFile")
        public String singleFile(){
            System.out.println("-------------------");
            return"/singleFile";
        }
    
        /**
         * Desc : 单文件上传
         *  注意:不指定上传目录,默认是上传到项目的根目录
         * User : RICK 
         * Time : 2017/8/23 9:40
          */
        @ResponseBody
        @PostMapping("/singleUpload")
        public ResultJson singleUpload(@RequestParam("file")MultipartFile file){
            if (!file.isEmpty()){
                try {
                    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));
                    out.write(file.getBytes());
                    out.flush();
                    out.close();
                } catch(Exception e){
                    e.printStackTrace();
                    return ResultJson.buildFailInstance("上传失败");
                }
            } else {
                return ResultJson.buildFailInstance("上传失败,文件为空!");
            }
            return ResultJson.buildSuccessInstance();
        }
    }

    3、编写文件上传的设置

    package com.rick;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.boot.web.servlet.MultipartConfigFactory;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.context.annotation.Bean;
    
    import javax.servlet.MultipartConfigElement;
    
    @SpringBootApplication
    @EnableConfigurationProperties
    @ServletComponentScan
    public class SpringbootEdu01Application {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootEdu01Application.class, args);
        }
    
        /**
         * Desc :  设置文件上传的基本配置
         * User : RICK
         * Time : 2017/8/23 10:11
          */
    
        @Bean
        public MultipartConfigElement multipartConfigElement(){
            MultipartConfigFactory factory = new MultipartConfigFactory();
            //设置文件大小限制 ,超了,页面会抛出异常信息,这时候就需要进行异常信息的处理了;
            factory.setMaxFileSize("1MB");//KB,MB
            //设置总上传数据总大小
            factory.setMaxRequestSize("10MB");////KB,MB
            //设置文件存放位置
    //        factory.setLocation("d:\files");
            return factory.createMultipartConfig();
        }
    }

    4、启动项目测试

    访问http://localhost:8080/singleFile出现文件上传页面

    选择要上传的文件,点击上传

    上传成功,到项目根目录下查看文件是否存在

    项目清单:

    二、多文件上传

    1、编写多文件上传页面multFile.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>多文件上传</title>
    </head>
    <body>
        <form method="post" enctype="multipart/form-data" action="/multUpload">
            <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>

    2、编写多文件上传后台代码FileUploadController.java

    package com.rick.apps.controller;
    
    import com.rick.common.ResultJson;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.List;
    
    /**
     * Desc :  文件上传
     * User : RICK
     * Time : 2017/8/23 9:36
      */
    
    @Controller
    public class FileUploadController {
    
        /**
         * Desc :  跳转单文件上传页面
         * User : RICK
         * Time : 2017/8/23 9:37
          */
        @RequestMapping("/singleFile")
        public String singleFile(){
            return"/singleFile";
        }
    
        /**
         * Desc : 单文件上传
         *  注意:不指定上传目录,默认是上传到项目的根目录
         * User : RICK 
         * Time : 2017/8/23 9:40
          */
        @ResponseBody
        @PostMapping("/singleUpload")
        public ResultJson singleUpload(@RequestParam("file")MultipartFile file){
            if (!file.isEmpty()){
                try {
                    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));
                    out.write(file.getBytes());
                    out.flush();
                    out.close();
                } catch(Exception e){
                    e.printStackTrace();
                    return ResultJson.buildFailInstance("上传失败");
                }
            } else {
                return ResultJson.buildFailInstance("上传失败,文件为空!");
            }
            return ResultJson.buildSuccessInstance();
        }
    
        /**
         * Desc :  跳转多文件上传页面
         * User : RICK
         * Time : 2017/8/23 9:37
         */
        @RequestMapping("/multFile")
        public String multFile(){
            return"/multFile";
        }
    
    
        /**
         * Desc :  多文件上传
         *  主要是使用了MultipartHttpServletRequest和MultipartFile
         * User : RICK
         * Time : 2017/8/23 10:17
          */
        @ResponseBody
        @PostMapping("/multUpload")
        public ResultJson multUpload(HttpServletRequest request){
            try {
                List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file");
                MultipartFile file = null;
                BufferedOutputStream stream = null;
                for (int i=0;i<files.size();i++){
                    file = files.get(i);
                    if(!file.isEmpty()){
                        byte[] bytes = file.getBytes();
                        stream = new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));
                        stream.write(bytes);
                        stream.flush();
                        stream.close();
                    }
                }
            } catch(Exception e){
                e.printStackTrace();
                return ResultJson.buildFailInstance("上传失败");
            }
            return ResultJson.buildSuccessInstance();
        }
    
    
    }

    3、启动项目测试,http://localhost:8080/multFile

     选择文件

    点击上传

    到项目根目录下查看文件是否上传成功

    项目清单:

  • 相关阅读:
    序列化流与反序列化流
    io流之Properties类
    io流之转换流与缓冲流
    Io流之File概述(递归/字节流/字符流)
    基本数据类型包装/System类/Math类/Arrays类
    Date类概述与Calendar类概念
    String类型概述
    20180926 小小插件 (弹窗)
    20180901 文件加载 错误处理 错误的触发
    20180828 优化留言板 功能(增加 删除 修改 查看)!
  • 原文地址:https://www.cnblogs.com/zrbfree/p/7416917.html
Copyright © 2011-2022 走看看