首页 > 其他分享 >html多文件上传(springboot)

html多文件上传(springboot)

时间:2023-08-21 14:32:45浏览次数:48  
标签:files 文件 springboot formdata html file var 上传

一、文件的上传

1、前端html上传文件
(1)html代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>

    <script>
        $(function () {
            //使用ajax传输表单内的formdata的文件
            $("#upload").click(function () {

                var files = document.getElementById("file").files;
                //创建FormData对象
                var formdata = new FormData();
                //设置formdata,追加文件数据
                for(var i=0;i<files.length;i++){
                    console.info(files[i].name);
                    formdata.append("file", files[i]);
                }
            
                $.ajax({
                    url: 'http://localhost:8080/upload',
                    type: 'POST',
                    cache: false,
                    data: formdata,
                    //ajax2.0可以不用设置请求头,但是jq帮我们自动设置了,这样的话需要我们自己取消掉
                    processData: false,
                    //取消帮我们格式化数据,是什么就是什么
                    contentType: false,
                    success:function (res) {
                        alert(res);
                    }
                });

            });

            //选择了文件确定后才会触发该事件,将文件名显示到下方
            $("#file").change(function () {
               console.info("change");
                var files = document.getElementById("file").files;
                var names="";
                for(var i=0;i<files.length;i++){
                    names+=files[i].name+"<br>"
                }

                $("#showFileDiv").html(names);

            });


        })

    </script>
</head>
<body>

<!--使用表单提交文件-->
<!-- 可以选择多个文件:multiple="multiple";accept:设置可选择的文件类型,用“,”分割多种类型 -->
<form id="uploadForm" class="form-inline" enctype="multipart/form-data">
    <input id="file" type="file" class="form-control" name="file" multiple="multiple" accept=".pdf,.zip,.xls,.doc,.txt,.png,.jpg "/>
    <button id="upload" type="button">upload</button>
</form>

<div id="showFileDiv"></div>



</body>
</html>
(2)相比单文件上传,这里主要改了以下几点:
  • 1、 对input标签增加属性:multiple="multiple";,以支持多文件上传
  • 2、 对input标签增加属性:accept:".pdf,.zip"设置可选择的文件类型,用“,”分割多种类型。实现简单的文件限制。
  • 3、上传多个文件后,文件封装添加到formdata中后,还可以追加后台所需要的其他数据,在后台使用对应的键进行接收,示例:
//还可以添加后台所需要的其他数据,在后台方法中使用对应的键值即可接收
                formdata.append("title","测试添加标题");
                formdata.append("category","测试添加分类");
  • 4、在使用append方法后,在控制台里只能看到FormData原型,但是对应的键值对已经添加到表单里了,存储的数据并不是以对象属性的方式体现。如果要查看上传的formdata中的数据,可使用以下两种方法:
//查看formdata中的数据
                //这种方法只输出键值
                for (var value of formdata.values()) {
                    console.log(value);
                }
                
                //这种方法分别输出了键以及键值
                for (var [a, b] of formdata.entries()) {
                    console.log(a, b);
                }
  • 5、选择文件后,将文件名显示到下方,首先添加在html页面中添加<div id="showFileDiv"></div>,然后使用语句:
//选择了文件确定后才会触发该事件,将文件名显示到下方,其中file为input标签的id
            $("#file").change(function () {
               console.info("change");
                var files = document.getElementById("file").files;
                var names="";
                for(var i=0;i<files.length;i++){
                    names+=files[i].name+"<br>"
                }

                $("#showFileDiv").html(names);
            });

参考:
FormData 多文件上传input file控件限制上传文件类型

2、springboot后端接收文件
(1)后台代码:
@RequestMapping("/upload")
    public String upload(@RequestParam(value="file",required = false) MultipartFile[] files,
                         HttpServletRequest request,String title,String category)
            throws IllegalStateException, IOException {

        System.out.println("title:"+title);
        System.out.println("category"+category);
        System.out.println("length:"+files.length);

        // 判断上传的文件是否为空
        if (files.length==0) {
            throw new RuntimeException("上传失败!上传的文件为空!");
        }

        File directory = new File("");//设定为当前文件夹
        String parentDir=directory.getAbsolutePath()+"\\uploadFile";
        File parent = new File(parentDir);
        //如果该目录不存在,则使用mkdirs()方法创建多级目录
        if (!parent.exists()) {
            parent.mkdirs();
        }

        for (int i = 0; i < files.length; i++) {
            // 检查每个文件大小,设置单个文件最大上传大小为10MB
            long fileSize = files[i].getSize();
            System.out.println("\tsize=" + fileSize);
            if (fileSize > 10 * 1024 * 1024) {
                throw new RuntimeException("上传失败!上传的文件大小超出了限制!");
            }

            // 获取原始文件名
            String originalFilename = files[i].getOriginalFilename();
            System.out.println("\toriginalFilename=" + originalFilename);
            // 确定最终保存时使用的文件文件名
            String filename = UUID.randomUUID().toString();
            String suffix = "";
            //拼接文件名后缀
            int beginIndex = originalFilename.lastIndexOf(".");
            if (beginIndex != -1) {
                suffix = originalFilename.substring(beginIndex);
            }

            // 执行保存文件
            File dest = new File(parent, filename + suffix);
            files[i].transferTo(dest);

        }


        return "sucess";
    }
(2)有几点需要注意
  • 1、springboot默认上传文件大小限制为1M,如果需要修改,在配置文件application.properties中添加如下语句:
#设置单个文件大小为10M限制,总上传的数据大小也为100M
	spring.servlet.multipart.max-file-size=10MB
	spring.servlet.multipart.max-request-size=10MB
  • 2、在后端接收上传文件时注意@RequestParam("file")要和前端ajax中 formdata.append("file", files[i]);引号中的名称一致,同时可以接收formdata中的其他参数,如代码中添加的title,category。
  • 3、mkdir() 与 mkdirs() 方法的区别:mkdir()是创建子目录,若父目录不存在会创建失败,mkdirs()是创建多级目录,即如果父目录不存在会自动创建。

参考:H5 + input,Formdata,基于springboot多图片与多参数上传前后台交互

3、实现结果截图

html网页前端:

html多文件上传(springboot)_上传

后端控制台:

html多文件上传(springboot)_html_02

标签:files,文件,springboot,formdata,html,file,var,上传
From: https://blog.51cto.com/u_14299064/7175011

相关文章

  • Java FTP上传文件
    1、publicbooleanupload(StringftpPath,List<String>fileNameList,List<String>files){booleanisSuccess=true;FTPClientclient=newFTPClient();FileInputStreamfis=null;try{client.connect(......
  • 如何复制word的图文到富文本框编辑器中自动上传
    ​  自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片。需要用户手动一张张上传Word图片。如果只有一张图片还能......
  • django 上传文件
    前后端分离下django框架上传文件实现方式实现方式一,通过model字段FileFiled()来实现model类classReport(models.Model):p_id=models.PositiveIntegerField('病人ID')file=models.FileField(upload_to='uploads/report/%Y/%m/%d/')def__str__(self):......
  • SpringBoot整合swagger+MP+PageHelper
    1.SpringBoot整swagger接口文档【接口文档的作用:就是为了方便前后端的交互】1.1swagger依赖  <!--引入swagger2依赖-->    <dependency>      <groupId>com.spring4all</groupId>      <artifactId>swagger-spring-boot-starter</arti......
  • 基于SpringBoot的在线文档管理系统的设计与实现
    研究目的及意义随着信息技术的发展,为了提高文档管理效率,而开发了本基于SpringBoot的在线文档管理系统,本在线文档管理系统的开发具有很大的现实意义和实用意义。首先,在操作流程上,管理员和用户都只需要访问网页,便可进行文档信息的管理。不需要像手工记录,快速便捷,提高了文档管理的准......
  • Java前端上传文件后,将文件传输到后端,并将文件上传到FTP服务器上
    当我们在前端上传文件后,需要将文件传输到后端,并将文件上传到FTP服务器上。在Java中,我们可以使用ApacheCommonsNet库来实现FTP文件上传。下面是一个简单的示例,演示了如何在Java中实现前端上传文件后端接收并上传到FTP服务器的过程。前端上传文件首先,在前端页面中,我们需要一个文件......
  • 基于springboot网上点餐系统
    系统管理也都将通过计算机进行整体智能化操作,对于网上点餐系统所牵扯的管理及数据保存都是非常多的,例如管理员;首页、个人中心、用户管理、美食店管理、美食分类管理、美食信息管理、美食订单管理、美食评价管理、系统管理,用户;首页、个人中心、美食订单管理、美食评价管理、我的收藏......
  • 基于springboot的房屋租赁系统
    房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于SpringBoot的房屋租赁系统。本文重点阐述了房屋租赁系统的开发过程,以实际运用为开发背景,基于SpringBoot框架,运用了Java技术和MYSQ......
  • 基于springboot的网上购物商城系统研发
    系统功能分析本基于SpringBoot的网上购物商城系统主要满足三种用户的需求,这三种用户分别为管理员、商家和用户,下面将对这三种用户分别实现的功能进行详细的阐述。(1)用户:用户在系统前台可查看系统信息,包括首页、商品信息等,注册登录后主要功能模块包括购物车、个人中心、我的地址、我......
  • 基于springboot甘肃非物质文化网站的设计与开发
    系统功能结构设计在分析并得出使用者对程序的功能要求时,就可以进行程序设计了。管理员主要负责填充图书和其类别信息,并对已填充的数据进行维护,包括修改与删除,管理员也需要审核老师注册信息,发布公告信息,管理自助租房信息等。用户信息管理此页面提供给管理员的功能有:用户信息的查询管......