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)
上一篇 2022年5月1日 下午10:00
下一篇 2022年5月1日 下午10:00


相关推荐

  • js获取request中的值_set协议工作原理

    js获取request中的值_set协议工作原理设置http请求头HttpURLConnection.setRequestProperty(Stringkey,Stringvalue); 这个我居然都忘记了,哎~真是岁数大了,心好累。。。 例如:下面就是一个完整的原始网络请求方式HttpURLConnectionconn=null;try{…

    2025年10月23日
    3
  • 腾讯元宝深夜更新:混元T1正式版与DeepSeek V3-0324同步上线

    腾讯元宝深夜更新:混元T1正式版与DeepSeek V3-0324同步上线

    2026年3月12日
    1
  • python安装离线包_python离线包

    python安装离线包_python离线包广告关闭腾讯云 11 11 云上盛惠 精选热门产品助力上云 云服务器首年 88 元起 买的越多返的越多 最高返 5000 元 那么我现在开发了一套 python 程序 需要一些模块 怎么运行 二 离线包制作有 2 个解决方案 1 使用 requirement txt 离线安装打包好的包 whl 请参考链接 https blog csdn netwangyanin 这种方案

    2026年3月19日
    2
  • 配置搭建阿里云Docker镜像仓库 (Aliyun Docker Repository)

    配置搭建阿里云Docker镜像仓库 (Aliyun Docker Repository)阿里云 docker 镜像仓库地址 阿里云镜像仓库具体操作如下 点击对应仓库右边的管理进入具体操作界面按照操作指南来即可

    2026年3月19日
    1
  • A4988步进驱动

    A4988步进驱动基本知识绕组  常用的步进电机有四根线,1A1B2A2B,1A和1B是一个绕组,2A和2B是一个绕组,用万用表测试1A和1B之间是短路的,2A和2B之间是短路的,1A和1B,2A和2B是等效的。  通常状况下,步进电机可以自由转动(用手可以拧动),1A和1B接在一起的时候,用手拧会感到明显阻力,1A和1B,2A和2B分别接在一起,则阻力更大。步距角  所谓步进电机,就是可以…

    2022年6月29日
    39
  • Arduino 串行通信之串口通信 UART 原理及释义

    Arduino 串行通信之串口通信 UART 原理及释义对于 Arduino 来说 甚至是对于电子学领域来说 信号分为数字信号和模拟信号 这两种信号又分为输入和输出两种情况 所以我的理解是电子学就是一门研究这四种情况相互关系的学科 模拟信号是一种连续变化的物理量 能帮助我们更好地理解周围环境的信息 任何的信息都可以用模拟信号来准确表达 但其缺点是易受噪声的影响 信号被多次复制 或进行长距离传输之后 会发生衰减 相比而言数字信号受噪声的影响小 易于传

    2026年3月18日
    1

发表回复

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

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