系列文章目录

提示:具体呈现内容如下图片,点击上传会出现进度条



一、最终结果如下图所示

在这里插入图片描述

二、HTML和CSS样式如下

1.HTML代码如下所示

<body>
    <input type="file" name="uoload" id="uoload">
    <div class="progress">
        <div></div>
    </div>
    <!-- 按钮 -->
    <button id="d1">上传</button>
    <!-- 展示区域 -->
    <div id="show">

    </div>
</body>

2.CSS代码如下所示

 <style>
        .progress {
            width: 300px;
            border: 1px solid black;
            border-radius: 10px;
            height: 10px;
            margin: 10px 0px;
            overflow: hidden;
        }
        
        .progress>div {
            width: 0;
            height: 100%;
            background-color: blue;
            transition: all 1s;
        }
        
        #show {
            width: 300px;
            height: 300px;
            border: 1px solid red;
            background-repeat: no-repeat;
            background-size: contain;
        }
    </style>

二、JavaScript的代码片段如下

1.引入jquery库

第一步:如下所示:

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

2.JavaScript代码(实现上传进度)

JavaScript代码如下:

$(function() {
        $('#d1').on('click', function() {
            //获取上传文件
            var file = $('#uoload')[0].files[0];
            //创建文件上传格式对象
            var formData = new FormData();
            formData.append('fileInfo', file);
            //网络请求
            $.ajax({
                type: 'POST',
                url: 'http://192.168.205.93:3000/myload',
                data: formData,
                //设置文件上传格式
                processData: false,
                contentType: false,
                //添加自定义属性,监听上下文的进度
                xhr: function() {
                    //创建原生的ajax请求对象
                    var xhr = new XMLHttpRequest();
                    //监听进度的一个事件
                    xhr.upload.onprogress = function(e) {
                        console.log(e.total); //文件大小
                        console.log(e.loaded); //上传多少
                        var w = (e.loaded / e.total) * 100 + '%'
                        $('.progress > div').css({
                            width: w
                        })
                    }
                    return xhr
                },
                //获取数据
                success: (res) => {
                    console.log(res);
                    $('#show').css({
                        backgroundImage: `url(./serve/app/upload/${res.path})`,
                    });
                }
            })
        });
    })

三、总结

js代码的逻辑如下:

1.上传的内容是文件 --------------------------- FormData / 表单提交
2.怎么实现进度条的百分比 ------------------------ 这时候用到了原生XMLHttpRequest()中的api
3.监听上传文件大小api ---------------------------- XMLHttpRequest() 中的upload().οnprοgress=function(e)
e.total和e.loaded两个属性 前者表示:文件的总大小,后者表示已经上传的文件大小
4. 通过 var 百分比 =( e.loaded/ e.total) *100% 得到已经上传多少的百分比,然后将数值渲染到对应的盒子

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐