美文网首页
上传文件与设置进度条

上传文件与设置进度条

作者: 圆滚滚大煤球 | 来源:发表于2021-09-16 17:15 被阅读0次

    1、引入bootstrap.css和jquery.js;
    2、点击按钮后获取文件列表,添加到FormData,调用open函数指定类型与URL地址,在发起请求send();
    3、监听onreadystatechange事件,当服务器回应后,把传回来的数据转换成JSON字符串,修改img的URL地址,让图片文件显示在页面中;
    4、创建xhr对象开启监听文件上传进度,e.lengthComputable是true则计算进度条百分比,把结果给进度条;
    5、进度条完成后,修改颜色,移除类添加类

        <link rel="stylesheet" href="../bootstrap.css">
        <link rel="stylesheet" href="../bootstrap.css.map">
        <script src="../jquery.min.js"></script>
    

    HTML

        <!-- 1、文件选择框 -->
        <input type="file" name="" id="file1">
    
        <!-- 2、上传文件的按钮 -->
        <button id="btnUpload">上传文件</button>
    
    
        <!-- bootstrap中的进度条 -->
        <div class="progress" style="width: 400px; margin: 15px 10px;">
            <div class="progress-bar progress-bar-striped active" style="width: 0%" id="percent">
              0%
            </div>
          </div>
    
    
        <br/>
        <img src="" alt="" id="img" width="300">
    

    JS

        // 获取上传文件按钮
        var btnUpload = document.querySelector('#btnUpload');
        // 为按钮绑定单击事件处理函数
        btnUpload.addEventListener('click',function(){
    
            // 获取到用户选择的文件列表
            var files = document.querySelector('#file1').files
            if(files.length <= 0 ) {
                alert('请选择要上传的文件!')
            }
            console.log('用户选择了待上传的文件');
            var fd = new FormData()
    
            // 将用户选择的文件添加到fd中
            fd.append('avatar',files[0])
    
            // 创建xhr对象
            var xhr = new XMLHttpRequest()
    
    
            // 监听文件上传进度
            xhr.upload.onprogress = function(e) {
                // e.lengthComputable是一个布尔值 表示当前上传的长度是否具有可计算的长度
                if(e.lengthComputable) {
                    // e.loaded:已传输的字节 
                    // e.total:总传输的字节
                    // Math.ceil((e.loaded/total) * 100) 已传输的字节/总传输的字节*100获得百分比再由Math.ceil()取整
                    var procentComplete = Math.ceil((e.loaded/e.total) * 100)
                    console.log(procentComplete);
                    // 计算进度条的百分比 修改进度条的html
                   // $(selector).attr(attribute,value): 设置属性和值
                    $('#percent').attr('style','width:'+ procentComplete +'%').html(procentComplete +'%')
                   
                }
            }
            
            // 监听上传完成的事件
            xhr.upload.onload = function(){
                // 修改进度条颜色:移除当前类名,添加新类名
                $('#percent').removeClass().addClass('progress-bar progress-bar-success')
            }
    
            // 调用open函数 指定类型与URL地址
            xhr.open('POST','http://www.liulongbin.top:3006/api/upload/avatar')
    
            // 发起请求
            xhr.send(fd)
    
            // 监听onreadystatechange事件
            xhr.onreadystatechange = function() {
                if(xhr.readyState === 4 && xhr.status === 200) {
                    var data = JSON.parse(xhr.responseText)
                    console.log(data);
                    if(data.status === 200) {
                        document.querySelector('#img').src = 'http://www.liulongbin.top:3006' + data.url
                    } else {
                        console.log(data.message);
                    }
                }
            }
        })
    

    相关文章

      网友评论

          本文标题:上传文件与设置进度条

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