zoukankan      html  css  js  c++  java
  • js实现大文件分片上传的方法

    借助js的Blob对象FormData对象可以实现大文件分片上传的功能,关于Blob和FormData的具体使用方法可以到如下地址去查看
    FormData 对象的使用
    Blob 对象的使用
    以下是实现代码,本例中后端代码使用php来实现,只是演示基本功能,具体一些文件验证逻辑先忽略。
    前段代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>upload</title>
        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    </head>
    <body>
        <input type="file" name="file" id="file">
        <button id="upload" onClick="upload()">upload</button>
        <script type="text/javascript">
            var bytesPerPiece = 1024 * 1024; // 每个文件切片大小定为1MB .
            var totalPieces;
            //发送请求
            function upload() {
                var blob = document.getElementById("file").files[0];
                var start = 0;
                var end;
                var index = 0;
                var filesize = blob.size;
                var filename = blob.name;
    
                //计算文件切片总数
                totalPieces = Math.ceil(filesize / bytesPerPiece);
                while(start < filesize) {
                    end = start + bytesPerPiece;
                    if(end > filesize) {
                        end = filesize;
                    }
    
                    var chunk = blob.slice(start,end);//切割文件    
                    var sliceIndex= blob.name + index;
                    var formData = new FormData();
                    formData.append("file", chunk, filename);
                    $.ajax({
                        url: 'http://localhost:9999/test.php',
                        type: 'POST',
                        cache: false,
                        data: formData,
                        processData: false,
                        contentType: false,
                    }).done(function(res){ 
    
                    }).fail(function(res) {
    
                    });
                    start = end;
                    index++;
                }
            }
        </script>
    </body>
    </html>

    后端php代码:

    <?php
    
    header('Access-Control-Allow-Origin:*');
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
    
    $file = $_FILES['file'];
    $filename = $file['name'];
    file_put_contents($filename, file_get_contents($file['tmp_name']), FILE_APPEND);
  • 相关阅读:
    【Distributed】缓存技术
    【Redis】基本数据类型
    【Redis】安装、开启以及关闭
    【Ehcache】基础知识学习
    VS2012 改C# 模版
    C# Windows Services 启动和结束其它进程
    .net Console.ReadLine无效
    VS2012在解决方案资源管理器显示解决方案名称
    Mysql 数据库中9大对象
    C# 开发 Windows 服务 使用Log4net 组件 不能生成日志文件
  • 原文地址:https://www.cnblogs.com/sghy/p/9143955.html
Copyright © 2011-2022 走看看