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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pycharm Debug调试python程序

    Pycharm Debug调试python程序pycharm的Debug调试是非常方便简单的,具体步骤如下:Debug步骤首先运行一下程序,使得调试的程序是你运行的程序。添加断点:直接在标记处点击鼠标左键即可。(删除断点只需再点击断点处即可)Debug下运行代码:如图所示(shift+F9)按照所需调试进行代码调试。Debug的调试方式如下所示:分别为:1.showexecutionpoint…

    2022年10月28日
    0
  • Python删除文件中重复的内容「建议收藏」

    Python删除文件中重复的内容「建议收藏」1.背景:在将多个文件进行合并时,存在一个问题是许多文件中含有相同的内容,但是希望合并后的文件内容具有唯一性,即文件中的数据唯一,不会有重复的情况  #txt1内容为: #txt2内容为: #希望合并后的文件内容为: 123 234 456 123 254 456 …

    2022年5月23日
    51
  • 微信小程序轮播图实现详解

    微信小程序轮播图实现详解微信小程序轮播图实现详解先上效果:wxml代码:<swiperautoplayinterval=”2000″circularindicator-color=”#0094ff”indicator-dotsindicator-active-color=”#ff0094″><!–swiper默认高度已经写死,无法改变、无法由内容撑开–><swiper-item><imagemode=”widthFix”src=”../../16151702

    2022年5月21日
    31
  • java实现简单二叉树「建议收藏」

    java实现简单二叉树「建议收藏」二叉树全面讲解

    2022年5月31日
    31
  • python hashlib_Python hashlib模块实例使用详解

    python hashlib_Python hashlib模块实例使用详解这篇文章主要介绍了Pythonhashlib模块实例使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下hashlib模块主要的作用:加密保护消息安全,常用的加密算法如MD5,SHA1等。1、查看可用的算法有哪些hashlib_algorithms.py#!/usr/bin/envpython#-*-coding:utf-8-*-i…

    2022年6月6日
    27
  • 启动计算机 gho文件,u盘里只有gho文件怎么重装win7系统图解

    启动计算机 gho文件,u盘里只有gho文件怎么重装win7系统图解u盘里只有gho文件怎么重装win7系统图解,windows7系统现在还是主流系统,有朋友的windows7系统出现问题了,现在u盘里只有gho文件怎么重装win7系统,这是他们遇到u盘怎么重装win7系统的问题了,那么就让小编分享一个u盘里只有gho文件怎么重装win7系统图解给大家吧。u盘里只有gho文件怎么重装win7系统步骤:工具/原料WIN7GHOST系统镜像(可以从网上下载)大于2G…

    2022年7月12日
    19

发表回复

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

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