视频分片上传+C#后端合并

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>  
    <!-- 2.创建页面元素 -->  
    <div id="upload">  
        <input id="file" type="file" name="file" />
        <button id="btnButton" type="button">提交2</button>
    </div>  
    <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
    <script type="text/javascript" src="js/jquery-form.js"></script>
    <script type="text/javascript">
        $(function(){
            $("#btnButton").click(function () {
                sendRequest();
                return false;
            });
        })
        
        var BYTES_PER_CHUNK =1 * 1024 * 1024; // 每个文件切片大小定为1MB .
        var slices;
        var totalSlices;

        //发送请求
        function sendRequest() {
            var blob = document.getElementById("file").files[0];
            var start = 0;
            var end;
            var index = 0;


            // 计算文件切片总数
            slices = Math.ceil(blob.size / BYTES_PER_CHUNK);
            totalSlices= slices;
            while(start < blob.size) {
            end = start + BYTES_PER_CHUNK;
            if(end > blob.size) {
                end = blob.size;
            }
            uploadFile(blob, index, start, end);
            start = end;
            index++;
            if ( index>=totalSlices )
                location="reboot.htm";
            }
        }

        //上传文件
        function uploadFile(blob, index, start, end) {
            var xhr;
            var fd;
            var chunk;  
            var sliceIndex=blob.name+index;
            chunk =blob.slice(start,end);//切割文件 
            fd = new FormData();
            fd.append("UpgradeFileName", chunk, sliceIndex);
            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'http://192.168.10.134:8080/Training/UploadVideo', false);//false指同步上传,因为我的服务器内存较小,选择同步,如果追求速度,可以选择 //ture,异步上传
            xhr.send(fd);
            if((xhr.status >=200 && xhr.status < 300) || xhr.status == 304){
                setTimeout("",10);
            }else{
                uploadFile(blob, index, start, end);
            }
        }
</script>

</body>  
</html>
/// <summary>
        /// 文件合并
        /// </summary>
        /// <param name="files">文件列表</param>
        /// <param name="fullName">存放路径</param>
        public static void FileMerge(List<string> files, string fullName)
        {
            if (!(files.Count > 0))
            {
                throw new Exception("文件列表为空");
            }
            foreach (string item in files)
            {
                if (!File.Exists(item))
                {
                    throw new Exception(string.Format("文件{0}不存在", item));
                }
            }
            byte[] buffer = new byte[1024 * 100];
            using (FileStream outStream = new FileStream(fullName, FileMode.Create))
            {
                int readedLen = 0;
                FileStream srcStream = null;
                for (int i = 0; i < files.Count; i++)
                {
                    srcStream = new FileStream(files[i], FileMode.Open);
                    while ((readedLen = srcStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        outStream.Write(buffer, 0, readedLen);
                    }
                    srcStream.Close();
                }
            }
        }
原文地址:https://www.cnblogs.com/Mzg121584668/p/10955166.html