首页 > 其他分享 >JS文件动态上传进度条

JS文件动态上传进度条

时间:2022-10-24 10:36:57浏览次数:88  
标签:进度条 res JS fileLink link data var document 上传

原网站

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input type="file" id="file1">
    <button id="btn">上传文件</button>
    <br>
    <div class="progress" style="width: 500px; margin: 15px 10px;">
        <div class="progress-bar progress-bar-striped active" style="width: 0%" id="percent">
            0%
        </div>
    </div>
    <!-- 用来显示上传成功以后的图片 -->
    <img src="" alt="" id="img" width="800">
    <script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
    <script>
        //验证是否选择了文件
        // 获取上传文件的按钮
        var btn = document.querySelector('#btn')
            // 2.为按钮添加点击事件
        btn.addEventListener('click', function() {
            var files = document.querySelector('#file1').files

            if (files.length <= 0) {
                return alert('请选择要上传的文件')
            }
            // 2. 向FormData中追加文件
            var fd = new FormData()

            fd.append('avatar', files[0]) //avatar头像
            var xhr = new XMLHttpRequest()
                // 上传进度条事件
            xhr.upload.onprogress = function(e) {
                    if (e.lengthComputable) {
                        var percentComplete = Math.ceil((e.loaded / e.total) * 100)
                        console.log(percentComplete);
                        //  动态设置进度
                        $('#percent').attr('style', 'width:' + percentComplete + '%;')
                            .html(percentComplete + '%')
                    }
                }
                // 上传完成事件
            xhr.upload.onload = function() {
                $('#percent').removeClass().addClass('progress-bar progress-bar-success')
            }
            xhr.open('POST', '/upload/file')
            xhr.send(fd)

            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    var data = JSON.parse(xhr.responseText)
                    if (data.status === 200) {
                        document.querySelector('#img').src = '' + data.url
                    } else { //文件上传失败
                        console.log(data.message);
                    }
                }
            }

        })
    </script>
</body>

</html>
axios({
    method:'POST',
    url: '/upload/file?name=' + name,
    data: formData,
    onUploadProgress: (e) => {
        console.log(Math.floor(e.loaded / e.total * 100) + '%');
    }
}).then(res=>{
    console.log(res);
})

下载文件

const link = document.createElement('a');
link.href = decodeURIComponent(res.data.url);
link.download = res.data.name;
link.click();
link.remove();

使用axios下载文件

axios({
    url: res.data.url,
    method: 'GET',
    responseType: 'blob',
}).then((response) => {
    var fileURL = window.URL.createObjectURL(new Blob([response.data]));
    var fileLink = document.createElement('a');
    fileLink.href = fileURL;
    fileLink.setAttribute('download', res.data.name);
    fileLink.click();
});

标签:进度条,res,JS,fileLink,link,data,var,document,上传
From: https://www.cnblogs.com/Lmyong/p/16820650.html

相关文章

  • # vue 实现文件切上传
    vue实现文件切上传在实际开发项目过程中有时候需要上传比较大的文件,然后呢,上传的时候相对来说就会慢一些,so,后台可能会要求前端进行文件切片上传,很简单哈,就是把比如说1个......
  • chooseLocation:fail the api need to be declared in the requiredPrivateInfos fiel
    错误描述在使用uni-app开发微信小程序的时候,想要通过uni.chooseLocation获取用户地理位置的时候出现chooseLocation:failtheapineedtobedeclaredintherequiredPr......
  • Python&JS宏 实现保留样式合并表格后拆分
    ......
  • json模块
    目录json模块简介json.dumps()、json.loads()json.dump()、json.load()json模块简介不同的编程语言之间的数据无法直接交互,需要中间有一个翻译官就是json模块。所有......
  • 将Js对象转化为树状结构
    实现效果//转换前:source=[{id:1,pid:0,name:'body'},{id:2,pid:1,......
  • C# 配置EF接口报错:ObjectContent`1”类型未能序列化内容类型“application/json; char
    WebApi项目中,配置了EntityFramework,一顿LINQ操作后接口调试出现以下错误:{"Message":"出现错误。","ExceptionMessage":"“ObjectContent`1”类型未能序列化内容......
  • 关于jsp页面中的小细节们
    细节一:利用jsp判断文本框的输入格式是否正确也就是主要利用script标签进行判断,主要用到的是正则表达式(判断是否为整数);再加上if语句的配合,就能够在文本框的格式不正确时,发......
  • nvm nodejs版本管理用具
    nvm简介全称node.jsversionmanagement,nvm是nodejs版本管理用具。nvm可以快速切换使用不同版本的node。nvm下载地址按照提示安装安装完毕后,找到安装的路径,一些简单配......
  • redis采用fastjson序列化方式
    packagecom.wangbiao.security.config;importcom.alibaba.fastjson.support.spring.FastJsonRedisSerializer;importorg.springframework.context.annotation.Bean;......
  • JSTL C标签怎么判断参数是否为空
    有时候我们在使用JSTLC标签<c:if>语句的时候,想判断参数是否为空,怎么判断呢,下面来分享一下方法工具/原料JSTLC标签JSTLC标签判断参数是否为空方法方法/步骤第......