原生JS实现大文件分片

//为了实现断点续传,研究了js的文件分片
//实现断点续传的构思
//文件分片按顺序上传,上传第一个后文件名md5加密保存到rdis的key,value保存为上传的index,
//然后下面每次上传成功就更新对应的value,保持最新的
//第一次上传时
//查询redis是否已经存在相同的key,如果相同就跳到保存的index的下一个上传
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script>

    var 切片大小=(1024*1024)*1;//确定分片大小
    var xmt=new XMLHttpRequest();//axaj请求
    function updata(index) {//index是上传标记的序列

    var file=document.getElementById("文件").files[0];//获取文件
    let {fname ,fext}=file.name.split(.);//获取文件的名字和拓展名
    var star=index*切片大小;//切片的起点
    if(star>file.size)//判断起点是否已经超过文件的长度,超过说明已经
    {
        return;
    }


    var bool=file.slice(star,star+切片大小);//slice(分割起点,分割终点)是js切割文件的函数,
    var boolname=fname+index+fext
    var boolfile=new File([bool],boolname)//把分割后的快转成文件传输
    var from=new FormData();//定义集合方便后端接收

        from.append("切片序列", index);
        from.append("切片长度", 切片大小);
        from.append("name",file.name)
        from.append("file",boolfile);
        from.append("name",file.name)
        from.append("file",boolfile);
    xmt.open("post","/接收文件",true)//发送请求
    xmt.send(from)//携带集合
        xmt.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                //alert(this.responseText)
                    if ( this.responseText=="上传完成"){//按顺序上传,只有上一片上传成功下一个才能上传
                         //这里可以加个判断,获取断点,获取后下一个,后端也会判断切片是否已经下载过


                         updata(++index);
                        document.getElementById("显示").value=star/file.size;//显示上传的进度

                    }


                       }
        };

    }


</script>
<body>
<div>
<input type="file" name="选择文件" id="文件">//获取文件
<input type="button" value="确定" onclick="updata(0)">//点击执行
<br>
    <input type="text" id="显示">//
</div>

</body>
</html>

 

原生JS实现大文件分片

上一篇:【转】asp.netcore 高并发下使用HttpClient的方法


下一篇:L. Let's Play Curling