zoukankan      html  css  js  c++  java
  • springboot(九)文件上传

      在企业级项目开发过程中,上传文件是最常用到的功能。SpringBoot集成了SpringMVC,当然上传文件的方式跟SpringMVC没有什么出入。下面我们来创建一个SpringBoot项目完成单个、多个文件的上传。

      本文目标:

      使用SpringBoot项目完成单个、多个文件的上传处理,并将上传的文件保存到指定目录下。

    一、项目的创建:

      项目目录:

      我们使用InteiilJ IDEA工具构建一个SpringBoot项目,项目先加入Web、JSP、Servlet依赖(pom.xml)。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.2.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.dyh</groupId>
        <artifactId>lesson_ten</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>lesson_ten</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <!--<scope>provided</scope>-->
            </dependency>
            <!-- spring boot tomcat jsp 支持开启 -->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
                    <!-- servlet 支持开启 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
                        
    View Code

     二、文件application.properties文件配置

      1、配置application.properties文件支持JSP页面的访问,配置preffix以及suffix路径转发规则。

      2、加入spring.http.multipart.max-file-size以及spring.http.multipart.max-request-size配置信息。还有其他配置信息,可以搜索。

    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    spring.http.multipart.max-file-size=1024Mb
    spring.http.multipart.max-request-size=2048Mb

    三、书写jsp文件

    注意:属性enctype="multipart/form-data"

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        单个文件上传:<br/>
        <form action="/upload" method="post" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit" value="提交上传"/>
        </form>
        <br/>
    多个文件上传:
    <form action="/uploads" method="post" enctype="multipart/form-data">
        文件1:<input type="file" name="file"/><br/>
        文件2:<input type="file" name="file"/><br/>
        文件3:<input type="file" name="file"/><br/>
        <input type="submit" value="上传多个文件"/>
    </form>
    </body>
    </html>

    四、核心代码,上传单个或多个文件

    @Controller
    public class UploadController {
        /**
         * 初始化上传文件界面,跳转到index.jsp
         */
        @RequestMapping(value = "/index",method = RequestMethod.GET)
        public String index(){
            return "index";
        }
    
        /**
         * 提取上传方法为公共方法
         * @param uploadDir 上传文件目录
         * @param file 上传对象
         * @throws Exception
         */
        private void executeUpload(String uploadDir,MultipartFile file) throws Exception{
            //文件后缀名
            String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            //上传文件名
            String filename = UUID.randomUUID() + suffix;
            //服务器端保存的文件对象
            File serverFile = new File(uploadDir + filename);
            //将上传的文件写入到服务器端文件内
            file.transferTo(serverFile);
        }
    
        /**
         * 上传文件方法
         * @param file 前台上传的文件对象
         */
        @RequestMapping(value = "/upload",method = RequestMethod.POST)
        public @ResponseBody String upload(HttpServletRequest request, MultipartFile file){
            try {
                //上传目录地址
                String uploadDir = request.getSession().getServletContext().getRealPath("/") +"upload/";
                //如果目录不存在,自动创建文件夹
                File dir = new File(uploadDir);
                if(!dir.exists())
                {
                    dir.mkdir();
                }
                //调用上传方法
                executeUpload(uploadDir,file);
            }catch (Exception e)
            {
                //打印错误堆栈信息
                e.printStackTrace();
                return "上传失败";
            }
    
            return "上传成功";
        }
    
        /**
         * 上传多个文件
         * @param request 请求对象
         * @param file 上传文件集合
         */
        @RequestMapping(value = "/uploads",method = RequestMethod.POST)
        public @ResponseBody String uploads(HttpServletRequest request,MultipartFile[] file)
        {
            try {
                //上传目录地址
                String uploadDir = request.getSession().getServletContext().getRealPath("/") +"upload/";
                //如果目录不存在,自动创建文件夹
                File dir = new File(uploadDir);
                if(!dir.exists())
                {
                    dir.mkdir();
                }
                //遍历文件数组执行上传
                for (int i =0;i<file.length;i++) {
                    if(file[i] != null) {
                        //调用上传方法
                        executeUpload(uploadDir, file[i]);
                    }
                }
            }catch (Exception e)
            {
                //打印错误堆栈信息
                e.printStackTrace();
                return "上传失败";
            }
            return "上传成功";
        }
    }

    五、测试:

    总结:

      主要讲解了SringBoot项目如何上传单个、多个文件到服务器端指定目录下,上传时修改限制上传文件容量大小,上传文件的命名规则等

  • 相关阅读:
    shell脚本修改Linux系统中所有IP样例
    关闭并卸载数据库脚本
    查询编译不通过的存储过程并重新编译
    SQL函数造数据样例(一)
    类型转换和多态
    Java学习笔记(三)
    Java学习笔记二()
    Java学习笔记(一)
    1.2.零宽断言
    1.3.匹配小括号的字符(可能有小括号在一行的,也有多行的)
  • 原文地址:https://www.cnblogs.com/soft2018/p/10300797.html
Copyright © 2011-2022 走看看