SpringBoot上传文件(使用form)

SpringBoot上传文件(使用form)介绍文件上传是企业开发中最常用的功能。本文主要介绍SpringBoot中使用表单上传时单文件上传和多文件上传的操作方式。maven依赖<dependency><groupId>org.springframework.boot</groupId><artifa…

大家好,又见面了,我是你们的朋友全栈君。

介绍

文件上传是企业开发中最常用的功能。本文主要介绍SpringBoot中使用表单上传时单文件上传和多文件上传的操作方式。
 

 maven依赖

 

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>

 

配置文件

 

spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB

分别配置jsp的前后缀、上传文件总的最大值和单个文件最大值
 

 

上传文件工具类

 

这里的静态方法executeUpload接收两个参数,分别是服务器储存文件位置和文件对象类。将接收的文件对象转储到服务器目录中。

 


package com.example.fileuploadbyform.utils;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

public  class FileUtil {

    public static 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);
    }
}

 

 

单文件上传

我们准备一个upload.jsp文件用来上传文件


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>
</body>
</html>

 

在来到controller层新建一个FileUploadController文件
 

@RequestMapping("/oneFile")
    public String index(){
        return "upload";
    }


@RequestMapping("/upload")
    @ResponseBody
    public String upload(HttpServletRequest req, MultipartFile file){
        try{

            String uploadDir = req.getSession().getServletContext().getRealPath("/")+"upload/";
            File dir = new File(uploadDir);
            if(!dir.exists()){
                dir.mkdir();
            }
            FileUtil.executeUpload(uploadDir,file);
        }catch(Exception e){
            e.printStackTrace();
            return "上传失败";
        }
        return "上传成功";
    }

 

多文件上传

多文件上传比起单文件上传有所不同的就是对接收的文件数组做了一个循环储存,下面是代码。
 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/uploads" method="post" enctype="multipart/form-data">
    文件一<input type="file" name="file">
    文件二<input type="file" name="file">
    文件三<input type="file" name="file">
    <input type="submit" value="上传">
</form>
</body>
</html>
   @RequestMapping("/twoFile")
    public String index1(){
        return "uploads";
    }

    @RequestMapping("/uploads")
    @ResponseBody
    public String uploads(HttpServletRequest req, MultipartFile[] file){
        try{
            String uploadDir = req.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){
                    FileUtil.executeUpload(uploadDir,file[i]);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
            return "上传失败";
        }
        return "上传成功";
    }

易错点

1、调用executeUpload之前要判断文件对象是否为空
2、application.yml文件中要配置上传文件最大限制和单个文件上传限制
3、多文件上传时统一form中input的type为file的name要统一,方便controller层中的MultipartFile数组接收

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133512.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 显示隐藏高德地图点标注的文本标签「建议收藏」

    显示隐藏高德地图点标注的文本标签「建议收藏」@[显示隐藏高德地图点标注的文本标签]效果如图欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你…

    2022年5月14日
    112
  • idea2021.10 激活码mac版本-激活码分享

    (idea2021.10 激活码mac版本)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    65
  • 聊聊系统平均负载_什么是负载敏感系统

    聊聊系统平均负载_什么是负载敏感系统一、什么是平均负载单位时间内,系统处于可运行状态和不可中断状态的进程数,可简单理解为系统平均活跃进程数可运行状态:top命令状态为R,包括Runnable和Running不可中断状态:top命令状态为D,正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如等待硬件设备的I/O响应,这往往是对数据一致性的一种保护机制二、如何查看平均负载$uptime…,loada…

    2022年9月13日
    1
  • idea 激活码 2022.01(注册激活)

    (idea 激活码 2022.01)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html40ZKSWCX8G-eyJsa…

    2022年4月2日
    898
  • eclipse、MyEclipse实现批量改动文件编码

    eclipse、MyEclipse实现批量改动文件编码

    2022年1月25日
    37
  • 如何系统备份ghost_服务器可以用pe备份吗

    如何系统备份ghost_服务器可以用pe备份吗电脑出现系统故障是一个很正常的现象,在这个时候只能通过重组系统的方法来解决故障,如果我们此前有将正常的系统备份到U盘里面那么重装系统就会变得很简单,接下来就教给大家怎样用GHOST备份系统。1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。2、重启后电脑就会进入一键…

    2022年9月6日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号