美文网首页日更挑战集锦让前端飞Web前端之路
JQuery | 如何上传文件?(多文件上传)

JQuery | 如何上传文件?(多文件上传)

作者: 峰眼看世界 | 来源:发表于2020-03-21 17:08 被阅读0次
    coding

    上篇文章 中介绍了web开发中如何上传单个文件,多文件上传也类似,本文就简单介绍下。本文技术栈为:
    前端:HTML / Jquery
    后端:Java / SpringMVC / Spring boot

    文件上传可以通过 form表单 方式提交到后台,也可以 Ajax 模拟表单方式提交到后台,下边分别演示。

    form表单上传

    1. 前端代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>上传文件</title>
    </head>
    
    <body>
        <h1>文件上传示例</h1>
        <form method="post" enctype="multipart/form-data" action="/upload-form" >
            <input id="file" type="file" name="file" multiple accept="*">
            <input type="submit">
        </form>
    </body>
    </html>
    
    1. 后端代码:
    @Controller
    public class UploadController {
        @PostMapping("upload-form")
        public String upload(@RequestParam("file") MultipartFile[] file) {
            for (MultipartFile file : files) {
                // todo 将文件保存到服务器
            }
            return "another-page";
        }
    }
    

    Ajax方式上传

    Ajax方式上传本质上还是模拟表单数据进行提交,这种方式常用在表单中需要上传文件,可以先用Ajax方式上传到服务器,同时从后台返回保存的路径,前台记录此路径,待提交整个表单数据时携带文件路径一起提交到后台保存入库。

    1. 前端代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>上传文件</title>
    </head>
    
    <body>
        <h1>文件上传示例</h1>
        <div>
            <input id="file1" type="file" name="file1" multiple accept="*">
            <input type="button" value="上传" onclick="onUpload()">
        </div>
    
        <script type="text/javascript" src="/static/lib/jquery/1.9.1/jquery.min.js"></script>
        <script>
            function onUpload() {
                var formData = new FormData();
                var fileCount = $('#file1')[0].files.length;
                for(var i = 0; i < fileCount; i++){
                    formData.append('file1', $('#file1')[0].files[i]);
                }
                $.ajax({
                    url: '/upload-ajax',
                    type: 'POST',
                    async: false,
                    data: formData,
                    cache: false,
                    contentType: false,
                    processData: false,
                    success: function (data) {
                        alert(data);
                    }
                });
            }
        </script>
    </body>
    </html>
    
    1. 后端代码
    @Controller
    public class UploadController {
       @PostMapping("upload-ajax")
        @ResponseBody
        public String upload1(@RequestParam("file1") MultipartFile[] file) {
            for (MultipartFile file : files) {
                // todo 将文件保存到服务器
            }
            return "success";
        }
    }
    

    需要注意的地方

    1. 多文件上传和单文件的区别
    与单文件上传相比 前端 后端
    多文件上传 input里多了关键字 multiple MultipartFile类型变成了数组类型MultipartFile[]
    1. 注意上传文件大小

    上传文件如果后台报了这样的错:org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.,说明文件过大,SpringBoot默认上传文件大小不能超过1MB,可以通过修改properties文件,将阈值调大,例如:

    # 单个文件大小限制
    spring.http.multipart.max-file-size=20MB
    # 总的数据大小限制
    spring.http.multipart.max-request-size=100MB
    

    图片源自网络,侵权必删!

    相关文章

      网友评论

        本文标题:JQuery | 如何上传文件?(多文件上传)

        本文链接:https://www.haomeiwen.com/subject/cchuyhtx.html