首页 > 其他分享 >js实现文件分片上传

js实现文件分片上传

时间:2023-10-08 12:02:05浏览次数:37  
标签:form shardSize js file 分片 msg 上传 append

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS分片上传-极速上传</title>
</head>
<body>
    <input type="file" name="slice" id="slice" >
    <a href="javascript:void(0);" onclick="sendForm()">Js File Upload!</a>
    <div id="output"><!--  信息存放地  --> </div>
<br/>
</body>
<script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
    $("#slice").change(function(event) {
        var file = $("#slice")[0].files[0];
        PostFile(file,0);
    });
    //执行分片上传
    function PostFile(file,i){
        var name = file.name,                           //文件名
            size = file.size,                           //总大小shardSize = 2 * 1024 * 1024,
            shardSize = 10 * 1024 * 1024,                //以2MB为一个分片,每个分片的大小
            shardCount = Math.ceil(size / shardSize);   //总片数
        if(i >= shardCount){
            return;
        }
        //console.log(size,i+1,shardSize);  //文件总大小,第一次,分片大小//
        var start = i * shardSize;
        var end = start + shardSize;
        var packet = file.slice(start, end);  //将文件进行切片
        /*  构建form表单进行提交  */
        var form = new FormData();
        form.append("fileId", '001')
        form.append("data", packet); //slice方法用于切出文件的一部分
//         form.append("lastModified", file.lastModified); //最后的额修改时间
        form.append("name", name);
        form.append("totalSize", size);
        if(shardCount === i+1){
            shardSize = size - i * shardSize
        }
        form.append("shardSize", shardSize);
        form.append("total", shardCount); //总片数
        form.append("index", i + 1); //当前是第几片
        $.ajax({
            header: {
                web_token: "cpBvqWrr0UK9zPJoKj+412alxxcY6qFwrSVoO0juZg0S1jX/sGfMd9oi3AsSxW+MdWFrwtGCykUTmMqrqpbCElmT75DfB87lENC7lCuMxgF0d5wQB6yAubUVyGOzhbrScvIfD8ZSjOJ3D88AOy2xRd4oG8TxeGoMoZqnqIwjKg="
            },
            url: "http://127.0.0.1:9091/web/tool/insert_big_file",
            type: "POST",
            data: form,
            //timeout:"10000",  //超时10秒
            async: true, //异步
            dataType:"json",
            processData: false, //很重要,告诉jquery不要对form进行处理
            contentType: false, //很重要,指定为false才能形成正确的Content-Type
            success: function (msg) {
                console.log(msg);
                /*  表示上一块文件上传成功,继续下一次  */
                if (msg.data.status == 201) {
                    form = '';
                    i++;
                    PostFile(file, i);
                } else if (msg.data.status == 502) {
                    form = '';
                    /*  失败后,每2秒继续传一次分片文件  */
                    setInterval(function () { PostFile(file, i) }, 2000);
                } else if (msg.data.status == 200) {
                    console.log("上传成功");
                } else if (msg.data.status == 500) {
                    console.log('第'+msg.i+'次,上传文件有误!');
                } else {
                    console.log('未知错误');
                }
            }
        })
    }
</script>
</html>


参考文章:http://blog.ncmem.com/wordpress/2023/10/08/js%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0/

欢迎入群一起讨论

 

 

标签:form,shardSize,js,file,分片,msg,上传,append
From: https://www.cnblogs.com/songsu/p/17748551.html

相关文章

  • 【webapp】 JSP 的常见语法元素
    1.注释: JSP支持三种类型的注释:HTML注释、JSP注释和Java注释。HTML注释:使用 <!--注释内容--> 来添加HTML注释。JSP注释:使用 <%--注释内容--%> 来添加JSP注释。Java注释:使用 // 或 /**/ 来添加Java注释。2.声明: 使用 <%!声明代码%> 来定义......
  • JS 全屏和退出全屏--requestFullScreen详解及兼容代码
    浏览器全屏实现方式1.利用h5的 requestFullScreen2.摁F11实现全屏效果requestFullscreen全屏具体实现1.进入全屏   functionfull(ele){ if(ele.requestFullscreen){ ele.requestFullscreen(); }elseif(ele.mozRequestFullScr......
  • 【webapp】JSP工作原理和过程
    JSP编译:当客户端请求访问一个JSP页面时,Web服务器首先检查是否已经编译过该JSP页面。如果没有编译过或者源文件已更改,服务器会将JSP文件编译成一个Servlet源文件。Servlet编译:编译后的Servlet源文件进一步被编译成Java字节码文件,这个过程由服务器的JSP引擎完......
  • js_mind修改了支持单节点是否可编辑属性editable
    /***@licenseBSD*@[email protected]**ProjectHome:*https://github.com/hizzgdev/jsmind/*/;(function($w){'usestrict';console.warn("Theversionisoutdated.seedetails:https://hizzgdev.git......
  • 微信小程序的附件上传与预览
    微信小程序的附件上传与预览文件与图片上传wx.chooseMessageFile({count:10,type:'file',success(res){//tempFilePath可以作为img标签的src属性显示图consttempFilePaths=res.tempFiles;varwjpath=tempFilePat......
  • 算法:打印斐波那契数列的前30项(JS)
    打印斐波那契数列的前30项提示:斐波那契数列的前两项是1,其他项是之前两项之和1functionfibonacciIterative(n){2if(n<=0){//如果输入的n小于等于0,表示输入错误,返回错误提示3return"输入错误,请输入正整数";4}5leta=1;//初始化......
  • 算法:九九乘法表(JS)
    九九乘法表1functioncreateMultiplicationTable(){2lettable='';//创建一个空字符串用于存储乘法表3for(leti=1;i<=9;i++){//外层循环控制行数,从1到94for(letj=1;j<=i;j++){//内层循环控制每行的列数,从1到当前行数i......
  • 算法:寻找自幂数(JS)
    寻找自幂数*打印所有的3位自幂数,即水仙花数;*打印所有的4位自幂数,即四叶玫瑰数;*打印所有的5位自幂数,即五角星数;提示1:自幂数是指一个n位数,他的每个位上的数字的n次幂之和等于它本身;提示2:153是一个水仙花数,是因为153=1^3+5^3+3^3。1functionfindHarmonicNumbers......
  • 算法:判断平年和闰年(JS)
    判断平年和闰年要求:用户输入年份,如果该年是闰年,则打印"xxxx年是闰年",否则打印"xxxx是平年"  提示1:符合以下任何一个条件,该年就是闰年,否则就是平年  *该年能被400整除;  *该年能被4整除且不能被100整除  提示2:使用prompt()  提示3:用parseInt()1functi......
  • 大文件上传和下载解决方案
    前言前端处理“大”一直是一个痛点和难点,比如大文件、大数据量。虽然浏览器硬件有限,但是聪明的工程师总是能够最大化利用浏览器的能力和特性,优雅的解决一个个极端问题,满足用户的多样化需求。断点上传对于大文件,如果我们直接上传,用户网速够慢的话,可能需要等上几天几夜才能上传完......