web页超过2G以上大视频分片秒传方案

本文的视频上传方案是基于乐视视频点播做的原理分析

var videoUploadEntity = (function () {
    function videoUploadEntity() {
    }
    videoUploadEntity.upoadConfigEntity = {};
    videoUploadEntity.upoadConfigIAPIDocument = (function () {
        var upoadConfigIAPIDocument = new leCommonAjax.IAPIDocument();
        upoadConfigIAPIDocument.apiUrl = adminBase.reuqestUrl.uploadConfig;
        upoadConfigIAPIDocument.apiMeaning = "获取上传配置信息";
        upoadConfigIAPIDocument.apiQueryStringParameters = {

        };
        upoadConfigIAPIDocument.apiResponse = {
            panoramic: {
                isEmpty: false,
                isNull: false
            },
            v720p: {
                isEmpty: false,
                isNull: false
            },
            v1080p: {
                isEmpty: false,
                isNull: false
            }
        };
        return upoadConfigIAPIDocument;
    })();

    videoUploadEntity.uploadInitEntity = {
        videoName: "",
        uploadType: 1,
        fileSize: 0,
        panoramic: 0,
        uc1: 0,
        uc2: 0,
        v720p: false,
        v1080p: false
    };
    videoUploadEntity.uploadInitIAPIDocument = (function () {
        var uploadInitIAPIDocument = new leCommonAjax.IAPIDocument();
        uploadInitIAPIDocument.apiUrl = adminBase.reuqestUrl.uploadInit;
        uploadInitIAPIDocument.apiMeaning = "视频上传初始化";
        uploadInitIAPIDocument.apiQueryStringParameters = {
            videoName: {
                isEmpty: false,
                isNull: false
            },
            uploadType: {
                isEmpty: false,
                isNull: false
            },
            fileSize: {
                isEmpty: false,
                isNull: false
            },
            panoramic: {
                isEmpty: true,
                isNull: true
            },
            uc1: {
                isEmpty: true,
                isNull: true
            },
            uc2: {
                isEmpty: true,
                isNull: true
            },
            v720p: {
                isEmpty: true,
                isNull: true
            },
            v1080p: {
                isEmpty: true,
                isNull: true
            },
        };
        uploadInitIAPIDocument.apiResponse = {
            uploadUrl: {
                isEmpty: false,
                isNull: false
            },
            token: {
                isEmpty: false,
                isNull: false
            },
            uploadSize: {
                isEmpty: false,
                isNull: false
            }
        };
        return uploadInitIAPIDocument;
    })();
    //获取所有分类
    videoUploadEntity.videoCategoryEntity = {
        parentId: 0,
    };
    videoUploadEntity.videoCategoryIAPIDocument = (function () {
        var videoCategoryIAPIDocument = new leCommonAjax.IAPIDocument();
        videoCategoryIAPIDocument.apiUrl = adminBase.reuqestUrl.category;
        return videoCategoryIAPIDocument;
    })();
    return videoUploadEntity;
})();
var videoUploadDAL = (function () {
    function videoUploadDAL() {
    }
    videoUploadDAL.upoadConfig = function (successCallback, errorCallback) {
        leCommonAjax.ajax(videoUploadEntity.upoadConfigIAPIDocument, function (successData) {
            successCallback(successData.data);
        }, function (errorData) {
            errorCallback(errorData);
        }, {
            data: videoUploadEntity.upoadConfigEntity
        });
    };
    videoUploadDAL.uploadInit = function (successCallback, errorCallback) {
        leCommonAjax.ajax(videoUploadEntity.uploadInitIAPIDocument, function (successData) {
            successCallback(successData.data);
        }, function (errorData) {
            errorCallback(errorData);
        }, {
            type: 'post',
            data: videoUploadEntity.uploadInitEntity
        });
    };
    videoUploadDAL.getVideoCategory = function (successCallback, errorCallback) {
        leCommonAjax.ajax(videoUploadEntity.videoCategoryIAPIDocument, function (successData) {
            successCallback(successData.data);
        }, function (errorData) {
            errorCallback(errorData);
        }, {
            data: videoUploadEntity.videoCategoryEntity
        });
    };
    return videoUploadDAL;
})();
var leMd5 = (function () {
    function leMd5() {
    }
    leMd5.getMD5 = function (data) {

        // convert number to (unsigned) 32 bit hex, zero filled string
        function to_zerofilled_hex(n) {
            var t1 = (n >>> 0).toString(16)
            return "00000000".substr(0, 8 - t1.length) + t1
        }

        // convert array of chars to array of bytes 

        function chars_to_bytes(ac) {
            var retval = []
            for (var i = 0; i < ac.length; i++) {
                retval = retval.concat(str_to_bytes(ac[i]))
            }
            return retval
        }


        // convert a 64 bit unsigned number to array of bytes. Little endian

        function int64_to_bytes(num) {
            var retval = []
            for (var i = 0; i < 8; i++) {
                retval.push(num & 0xFF)
                num = num >>> 8
            }
            return retval
        }

        //  32 bit left-rotation

        function rol(num, places) {
            return ((num << places) & 0xFFFFFFFF) | (num >>> (32 - places))
        }

        // The 4 MD5 functions

        function fF(b, c, d) {
            return (b & c) | (~b & d)
        }

        function fG(b, c, d) {
            return (d & b) | (~d & c)
        }

        function fH(b, c, d) {
            return b ^ c ^ d
        }

        function fI(b, c, d) {
            return c ^ (b | ~d)
        }

        // pick 4 bytes at specified offset. Little-endian is assumed

        function bytes_to_int32(arr, off) {
            return (arr[off + 3] << 24) | (arr[off + 2] << 16) | (arr[off + 1] << 8) | (arr[off])
        }

        /*
        Conver string to array of bytes in UTF-8 encoding
        See: 
        http://www.dangrossman.info/2007/05/25/handling-utf-8-in-javascript-php-and-non-utf8-databases/
        http://stackoverflow.com/questions/1240408/reading-bytes-from-a-javascript-string
        How about a String.getBytes(<ENCODING>) for Javascript!? Isn't it time to add it?
        */

        function str_to_bytes(str) {
            var retval = []
            for (var i = 0; i < str.length; i++)
                if (str.charCodeAt(i) <= 0x7F) {
                    retval.push(str.charCodeAt(i))
                } else {
                    var tmp = encodeURIComponent(str.charAt(i)).substr(1).split('%')
                    for (var j = 0; j < tmp.length; j++) {
                        retval.push(parseInt(tmp[j], 0x10))
                    }
                }
            return retval
        }


        // convert the 4 32-bit buffers to a 128 bit hex string. (Little-endian is assumed)

        function int128le_to_hex(a, b, c, d) {
            var ra = ""
            var t = 0
            var ta = 0
            for (var i = 3; i >= 0; i--) {
                ta = arguments[i]
                t = (ta & 0xFF)
                ta = ta >>> 8
                t = t << 8
                t = t | (ta & 0xFF)
                ta = ta >>> 8
                t = t << 8
                t = t | (ta & 0xFF)
                ta = ta >>> 8
                t = t << 8
                t = t | ta
                ra = ra + to_zerofilled_hex(t)
            }
            return ra
        }

        // conversion from typed byte array to plain javascript array 

        function typed_to_plain(tarr) {
            var retval = new Array(tarr.length)
            for (var i = 0; i < tarr.length; i++) {
                retval[i] = tarr[i]
            }
            return retval
        }

        // check input data type and perform conversions if needed
        var databytes = null
        // String
        var type_mismatch = null
        if (typeof data == 'string') {
            // convert string to array bytes
            databytes = str_to_bytes(data)
        } else if (data.constructor == Array) {
            if (data.length === 0) {
                // if it's empty, just assume array of bytes
                databytes = data
            } else if (typeof data[0] == 'string') {
                databytes = chars_to_bytes(data)
            } else if (typeof data[0] == 'number') {
                databytes = data
            } else {
                type_mismatch = typeof data[0]
            }
        } else if (typeof ArrayBuffer != 'undefined') {
            if (data instanceof ArrayBuffer) {
                databytes = typed_to_plain(new Uint8Array(data))
            } else if ((data instanceof Uint8Array) || (data instanceof Int8Array)) {
                databytes = typed_to_plain(data)
            } else if ((data instanceof Uint32Array) || (data instanceof Int32Array) ||
                (data instanceof Uint16Array) || (data instanceof Int16Array) ||
                (data instanceof Float32Array) || (data instanceof Float64Array)
            ) {
                databytes = typed_to_plain(new Uint8Array(data.buffer))
            } else {
                type_mismatch = typeof data
            }
        } else {
            type_mismatch = typeof data
        }

        if (type_mismatch) {
            alert('MD5 type mismatch, cannot process ' + type_mismatch)
        }

        function _add(n1, n2) {
            return 0x0FFFFFFFF & (n1 + n2)
        }


        return do_digest()

        function do_digest() {

            // function update partial state for each run
            function updateRun(nf, sin32, dw32, b32) {
                var temp = d
                d = c
                c = b
                //b = b + rol(a + (nf + (sin32 + dw32)), b32)
                b = _add(b,
                    rol(
                        _add(a,
                            _add(nf, _add(sin32, dw32))
                        ), b32
                    )
                )
                a = temp
            }

            // save original length
            var org_len = databytes.length

            // first append the "1" + 7x "0"
            databytes.push(0x80)

            // determine required amount of padding
            var tail = databytes.length % 64
            // no room for msg length?
            if (tail > 56) {
                // pad to next 512 bit block
                for (var i = 0; i < (64 - tail) ; i++) {
                    databytes.push(0x0)
                }
                tail = databytes.length % 64
            }
            for (i = 0; i < (56 - tail) ; i++) {
                databytes.push(0x0)
            }
            // message length in bits mod 512 should now be 448
            // append 64 bit, little-endian original msg length (in *bits*!)
            databytes = databytes.concat(int64_to_bytes(org_len * 8))

            // initialize 4x32 bit state
            var h0 = 0x67452301
            var h1 = 0xEFCDAB89
            var h2 = 0x98BADCFE
            var h3 = 0x10325476

            // temp buffers
            var a = 0,
                b = 0,
                c = 0,
                d = 0

            // Digest message
            for (i = 0; i < databytes.length / 64; i++) {
                // initialize run
                a = h0
                b = h1
                c = h2
                d = h3

                var ptr = i * 64

                // do 64 runs
                updateRun(fF(b, c, d), 0xd76aa478, bytes_to_int32(databytes, ptr), 7)
                updateRun(fF(b, c, d), 0xe8c7b756, bytes_to_int32(databytes, ptr + 4), 12)
                updateRun(fF(b, c, d), 0x242070db, bytes_to_int32(databytes, ptr + 8), 17)
                updateRun(fF(b, c, d), 0xc1bdceee, bytes_to_int32(databytes, ptr + 12), 22)
                updateRun(fF(b, c, d), 0xf57c0faf, bytes_to_int32(databytes, ptr + 16), 7)
                updateRun(fF(b, c, d), 0x4787c62a, bytes_to_int32(databytes, ptr + 20), 12)
                updateRun(fF(b, c, d), 0xa8304613, bytes_to_int32(databytes, ptr + 24), 17)
                updateRun(fF(b, c, d), 0xfd469501, bytes_to_int32(databytes, ptr + 28), 22)
                updateRun(fF(b, c, d), 0x698098d8, bytes_to_int32(databytes, ptr + 32), 7)
                updateRun(fF(b, c, d), 0x8b44f7af, bytes_to_int32(databytes, ptr + 36), 12)
                updateRun(fF(b, c, d), 0xffff5bb1, bytes_to_int32(databytes, ptr + 40), 17)
                updateRun(fF(b, c, d), 0x895cd7be, bytes_to_int32(databytes, ptr + 44), 22)
                updateRun(fF(b, c, d), 0x6b901122, bytes_to_int32(databytes, ptr + 48), 7)
                updateRun(fF(b, c, d), 0xfd987193, bytes_to_int32(databytes, ptr + 52), 12)
                updateRun(fF(b, c, d), 0xa679438e, bytes_to_int32(databytes, ptr + 56), 17)
                updateRun(fF(b, c, d), 0x49b40821, bytes_to_int32(databytes, ptr + 60), 22)
                updateRun(fG(b, c, d), 0xf61e2562, bytes_to_int32(databytes, ptr + 4), 5)
                updateRun(fG(b, c, d), 0xc040b340, bytes_to_int32(databytes, ptr + 24), 9)
                updateRun(fG(b, c, d), 0x265e5a51, bytes_to_int32(databytes, ptr + 44), 14)
                updateRun(fG(b, c, d), 0xe9b6c7aa, bytes_to_int32(databytes, ptr), 20)
                updateRun(fG(b, c, d), 0xd62f105d, bytes_to_int32(databytes, ptr + 20), 5)
                updateRun(fG(b, c, d), 0x2441453, bytes_to_int32(databytes, ptr + 40), 9)
                updateRun(fG(b, c, d), 0xd8a1e681, bytes_to_int32(databytes, ptr + 60), 14)
                updateRun(fG(b, c, d), 0xe7d3fbc8, bytes_to_int32(databytes, ptr + 16), 20)
                updateRun(fG(b, c, d), 0x21e1cde6, bytes_to_int32(databytes, ptr + 36), 5)
                updateRun(fG(b, c, d), 0xc33707d6, bytes_to_int32(databytes, ptr + 56), 9)
                updateRun(fG(b, c, d), 0xf4d50d87, bytes_to_int32(databytes, ptr + 12), 14)
                updateRun(fG(b, c, d), 0x455a14ed, bytes_to_int32(databytes, ptr + 32), 20)
                updateRun(fG(b, c, d), 0xa9e3e905, bytes_to_int32(databytes, ptr + 52), 5)
                updateRun(fG(b, c, d), 0xfcefa3f8, bytes_to_int32(databytes, ptr + 8), 9)
                updateRun(fG(b, c, d), 0x676f02d9, bytes_to_int32(databytes, ptr + 28), 14)
                updateRun(fG(b, c, d), 0x8d2a4c8a, bytes_to_int32(databytes, ptr + 48), 20)
                updateRun(fH(b, c, d), 0xfffa3942, bytes_to_int32(databytes, ptr + 20), 4)
                updateRun(fH(b, c, d), 0x8771f681, bytes_to_int32(databytes, ptr + 32), 11)
                updateRun(fH(b, c, d), 0x6d9d6122, bytes_to_int32(databytes, ptr + 44), 16)
                updateRun(fH(b, c, d), 0xfde5380c, bytes_to_int32(databytes, ptr + 56), 23)
                updateRun(fH(b, c, d), 0xa4beea44, bytes_to_int32(databytes, ptr + 4), 4)
                updateRun(fH(b, c, d), 0x4bdecfa9, bytes_to_int32(databytes, ptr + 16), 11)
                updateRun(fH(b, c, d), 0xf6bb4b60, bytes_to_int32(databytes, ptr + 28), 16)
                updateRun(fH(b, c, d), 0xbebfbc70, bytes_to_int32(databytes, ptr + 40), 23)
                updateRun(fH(b, c, d), 0x289b7ec6, bytes_to_int32(databytes, ptr + 52), 4)
                updateRun(fH(b, c, d), 0xeaa127fa, bytes_to_int32(databytes, ptr), 11)
                updateRun(fH(b, c, d), 0xd4ef3085, bytes_to_int32(databytes, ptr + 12), 16)
                updateRun(fH(b, c, d), 0x4881d05, bytes_to_int32(databytes, ptr + 24), 23)
                updateRun(fH(b, c, d), 0xd9d4d039, bytes_to_int32(databytes, ptr + 36), 4)
                updateRun(fH(b, c, d), 0xe6db99e5, bytes_to_int32(databytes, ptr + 48), 11)
                updateRun(fH(b, c, d), 0x1fa27cf8, bytes_to_int32(databytes, ptr + 60), 16)
                updateRun(fH(b, c, d), 0xc4ac5665, bytes_to_int32(databytes, ptr + 8), 23)
                updateRun(fI(b, c, d), 0xf4292244, bytes_to_int32(databytes, ptr), 6)
                updateRun(fI(b, c, d), 0x432aff97, bytes_to_int32(databytes, ptr + 28), 10)
                updateRun(fI(b, c, d), 0xab9423a7, bytes_to_int32(databytes, ptr + 56), 15)
                updateRun(fI(b, c, d), 0xfc93a039, bytes_to_int32(databytes, ptr + 20), 21)
                updateRun(fI(b, c, d), 0x655b59c3, bytes_to_int32(databytes, ptr + 48), 6)
                updateRun(fI(b, c, d), 0x8f0ccc92, bytes_to_int32(databytes, ptr + 12), 10)
                updateRun(fI(b, c, d), 0xffeff47d, bytes_to_int32(databytes, ptr + 40), 15)
                updateRun(fI(b, c, d), 0x85845dd1, bytes_to_int32(databytes, ptr + 4), 21)
                updateRun(fI(b, c, d), 0x6fa87e4f, bytes_to_int32(databytes, ptr + 32), 6)
                updateRun(fI(b, c, d), 0xfe2ce6e0, bytes_to_int32(databytes, ptr + 60), 10)
                updateRun(fI(b, c, d), 0xa3014314, bytes_to_int32(databytes, ptr + 24), 15)
                updateRun(fI(b, c, d), 0x4e0811a1, bytes_to_int32(databytes, ptr + 52), 21)
                updateRun(fI(b, c, d), 0xf7537e82, bytes_to_int32(databytes, ptr + 16), 6)
                updateRun(fI(b, c, d), 0xbd3af235, bytes_to_int32(databytes, ptr + 44), 10)
                updateRun(fI(b, c, d), 0x2ad7d2bb, bytes_to_int32(databytes, ptr + 8), 15)
                updateRun(fI(b, c, d), 0xeb86d391, bytes_to_int32(databytes, ptr + 36), 21)

                // update buffers
                h0 = _add(h0, a)
                h1 = _add(h1, b)
                h2 = _add(h2, c)
                h3 = _add(h3, d)
            }
            // Done! Convert buffers to 128 bit (LE)
            return int128le_to_hex(h3, h2, h1, h0).toUpperCase()
        }
    };
    return leMd5;
})();
var leFileOperation = (function () {
    function leFileOperation() {
    }
    //存一下init传过来的字段 /开始
    //上传列表中现有的文件列表
    leFileOperation.videoUpload_fileList = [];
    leFileOperation.addFileCallback = function () { };
    //存一下init传过来的字段 /结束

    //文件选择对象
    leFileOperation.fileUploadList = {};
    //允许上传的文件类型
    leFileOperation.fileTypes = "wmv|wm|avi|dat|asf|rm|rmvb|ram|mpg|mpeg|mp4|mov|m4v|mkv|flv|vob|qt|divx|cpk|fli|flc|mod|dvix|dv|f4v|ts";
    //获取文件的类型
    leFileOperation.getFileType = function (file) {
        return file.name.split(".").pop();
    };
    //计算问价大小
    leFileOperation.calculateFileSize = function (file) {
        var fSize = file.size / 1024;
        fSize = fSize > 1024 ? (((fSize / 1024 * 10) >> 0) / 10).toFixed(1) + "M" : (((fSize * 10) >> 0) / 10).toFixed(1) + "K";
        return fSize;
    };
    //获取文件的key 加MD5
    leFileOperation.getFileKey = function (file) {
        var key = leMd5.getMD5([leFileOperation.getFileType(file), file.size, file.lastModifiedDate || file.name].join('_')).toLowerCase();
        return key;
    };
    //上传列表中现有的文件列表有没有此文件
    leFileOperation.checkParentFileList = function (file) {
        if (leFileOperation.videoUpload_fileList) {
            for (var f = 0; f < leFileOperation.videoUpload_fileList.length; f++) {
                var thisTempMd5 = leFileOperation.getFileKey(file);
                if (leFileOperation.videoUpload_fileList[f].md5 == thisTempMd5) {
                    return true;
                }
            }
        }
        return false;
    };
    //检查选择的文件名称是否合法
    leFileOperation.checkFileName = function (file) {
        var reg = /^\S{1,60}$/;
        var returnStr = file.name;
        var tempArr = returnStr.split('.');
        if (tempArr.length > 1) {
            tempArr.length--;
        }
        returnStr = tempArr.join('.');
        if (returnStr.length > 60 || returnStr.trim().length == 0) {
            return true;
        } else {
            return false;
        }
        //return !reg.test(returnStr);
    };
    //选中文件的时候
    leFileOperation.inputFileChange = function (e, element, callback) {
        dropFunction.removeDrop();
        dropFunction.addDrop();
        var files = e.target.files || e.dataTransfer.files;
        //文件添加信息对象
        var fileAddInfoObj = {
            errorFiles: [],
            successFiles: []
        };
        for (var i = 0; i < files.length; i++) {
            var file = files[i];
            var fType = leFileOperation.getFileType(file);
            if (file.size <= 0) {
                var tempErrorFile = new Object();
                tempErrorFile.file = file;
                tempErrorFile.errorMsg = "大小为0的文件";
                tempErrorFile.code = "101";
                fileAddInfoObj.errorFiles.push(tempErrorFile);
            } else if (leFileOperation.checkParentFileList(file)) {
                var tempErrorFile = new Object();
                tempErrorFile.file = file;
                tempErrorFile.errorMsg = "文件已在上传列表当中";
                tempErrorFile.code = "103";
                fileAddInfoObj.errorFiles.push(tempErrorFile);
            } else if (!eval("/" + leFileOperation.fileTypes + "$/i").test(fType)) {
                var tempErrorFile = new Object();
                tempErrorFile.file = file;
                tempErrorFile.errorMsg = "不支持的视频格式";
                tempErrorFile.code = "102";
                fileAddInfoObj.errorFiles.push(tempErrorFile);
            } else if (leFileOperation.fileUploadList[leFileOperation.getFileKey(file)]) {
                var tempErrorFile = new Object();
                tempErrorFile.file = file;
                tempErrorFile.errorMsg = "选择了相同的文件";
                tempErrorFile.code = "104";
                fileAddInfoObj.errorFiles.push(tempErrorFile);
            } else if (leFileOperation.checkFileName(file)) {
                var tempErrorFile = new Object();
                tempErrorFile.file = file;
                tempErrorFile.errorMsg = "视频名称不合法";
                tempErrorFile.code = "105";
                fileAddInfoObj.errorFiles.push(tempErrorFile);
            } else {
                var tempSuccessFile = new Object();
                tempSuccessFile.file = file;
                tempSuccessFile.successMsg = "成功";
                tempSuccessFile.code = "0";
                tempSuccessFile.md5 = leFileOperation.getFileKey(file);
                fileAddInfoObj.successFiles.push(tempSuccessFile);
                //成功之后直接加上文件
                leFileOperation.fileUploadList[tempSuccessFile.md5] = {
                    md5: tempSuccessFile.md5,
                    file: file,
                    parameter: ""
                };
                if (callback) {
                    leFileOperation.fileUploadList[tempSuccessFile.md5].parameter = callback({
                        file: file,
                        element: element,
                        md5: tempSuccessFile.md5
                    }) || "";
                }
            }
        }
        //添加文件的回调函数
        leFileOperation.addFileCallback(fileAddInfoObj);
    };

    var dropFunction = (function () {
        function dropFunction() {

        }
        dropFunction.dragover = function (e) {
            $("#upload-table-box").css({
                background: "#f9fafc",
            });
            e.stopPropagation();
            e.preventDefault();
        };
        dropFunction.dragleave = function (e) {
            $("#upload-table-box").css({
                background: "#fff",
            });
            e.stopPropagation();
            e.preventDefault();
        };
        dropFunction.drop = function (e) {
            $("#upload-table-box").css({
                background: "#fff",
            });
            leFileOperation.inputFileChange(e);
            e.stopPropagation();
            e.preventDefault();
        };
        dropFunction.addDrop = function () {
            try {
                document.getElementById("upload-table-box").addEventListener("dragover", dropFunction.dragover, !1);
                document.getElementById("upload-table-box").addEventListener("dragleave", dropFunction.dragleave, !1);
                document.getElementById("upload-table-box").addEventListener("drop", dropFunction.drop, !1);
            } catch (e) { }
        };
        dropFunction.removeDrop = function () {
            try {
                document.getElementById("upload-table-box").removeEventListener("dragover", dropFunction.dragover, !1);
                document.getElementById("upload-table-box").removeEventListener("dragleave", dropFunction.dragleave, !1);
                document.getElementById("upload-table-box").removeEventListener("drop", dropFunction.drop, !1);
            } catch (e) { }
        };
        dropFunction.addDrop();
        return dropFunction;
    })();
    //添加文件//多个文件时调用
    leFileOperation.addFile = function (e, callback) {
        dropFunction.removeDrop();
        $("#fileUploadId_Hsc").remove();
        var inpfile = document.getElementById("fileUploadId_Hsc");
        if (inpfile) {
            inpfile.click && e.target != inpfile && inpfile.click();
        } else {
            inpfile = document.createElement("input");
            $("body").append(inpfile);
            inpfile.setAttribute("id", "fileUploadId_Hsc");
            inpfile.setAttribute("type", "file");
            var tempFileTypeArr = leFileOperation.fileTypes.split("|");
            for (var item = 0; item < tempFileTypeArr.length; item++) {
                tempFileTypeArr[item] = "." + tempFileTypeArr[item];
            }
            var acceptFileType = tempFileTypeArr.join(",");
            inpfile.setAttribute("accept", acceptFileType);
            inpfile.setAttribute('autocomplete', "off");
            inpfile.setAttribute('multiple', "true");
            inpfile.style.display = "none";
            inpfile.addEventListener('change', function (fileObj) {
                leFileOperation.inputFileChange(fileObj, e, callback);
            }, !1);
            inpfile.click && e.target != inpfile && inpfile.click();
            dropFunction.addDrop();
        }
    };
    //添加文件//单个文件时调用
    leFileOperation.addSingleFile = function (e, callback) {
        $("#fileUploadId_Hsc").remove();
        var inpfile = document.getElementById("fileUploadId_Hsc");
        if (inpfile) {
            inpfile.click && e.target != inpfile && inpfile.click();
        } else {
            inpfile = document.createElement("input");
            $("body").append(inpfile);
            inpfile.setAttribute("id", "fileUploadId_Hsc");
            inpfile.setAttribute("type", "file");
            var tempFileTypeArr = leFileOperation.fileTypes.split("|");
            for (var item = 0; item < tempFileTypeArr.length; item++) {
                tempFileTypeArr[item] = "." + tempFileTypeArr[item];
            }
            var acceptFileType = tempFileTypeArr.join(",");
            inpfile.setAttribute("accept", acceptFileType);
            inpfile.style.display = "none";
            inpfile.addEventListener('change', function (fileObj) {
                leFileOperation.inputFileChange(fileObj, e, callback)
            }, !1);
            inpfile.click && e.target != inpfile && inpfile.click();
        }
    };
    leFileOperation.initOption = {};
    //使用前先调用初始化方法
    leFileOperation.init = function (initOption) {
        leFileOperation.initOption = initOption;
        leFileOperation.fileTypes = initOption.fileTypes || leFileOperation.fileTypes;
        leFileOperation.videoUpload_fileList = initOption.videoUpload_fileList;
        leFileOperation.addFileCallback = initOption.addFileCallback;
        for (var i = 0 ; i < initOption.multipleDomElement.length; i++) {
            var element = initOption.multipleDomElement[i];
            $(element).on("click", function (e) {
                leFileOperation.addFile(e, initOption.multipleCallback);
            });
        }
    };
    return leFileOperation;
})();

//使用demo
/*

leFileOperation.init({
            multipleDomElement: vaasFileUpload.initOptionObject.multipleDomElement,//一次允许选择多个文件,需要传递页面元素对象
            multipleCallback:function(data){},//如果需要额外加什么参数在这里设置如果不需要则 return "";
            videoUpload_fileList: vaasFileUpload.fileUploadList,    //上传列表中现有的文件列表//临时需要传递null
            addFileCallback: vaasFileUpload.addFileCallback,   //本次选择文件的回调函数
            fileTypes:""
        });
*/

// 全部上传的时候需要对 leFileOperation.fileUploadList[md5].parameter 进行参数传递  如:parameter = "&hsc=1&album=123";


var leFileUploadCommon = (function () {
    function leFileUploadCommon() {
    }
    //给数组添加remove函数
    Array.prototype.remove = function (index) {
        if (isNaN(index) || index > this.length) { return false; }
        this.splice(index, 1);
    };
    //cookie
    leFileUploadCommon.operationCookie = (function () {
        function operationCookie() {
        }
        operationCookie.setCookie = function (name, value, iDay) {
            operationCookie.removeCookie(name);
            var oDate = new Date();
            value = encodeURIComponent(value);
            oDate.setDate(oDate.getDate() + iDay);
            document.cookie = name + '=' + value + ';expires=' + oDate;
            if (arguments[3] && typeof arguments[3] == 'function') {
                arguments[3]();
            }
            return operationCookie;
        };
        operationCookie.getCookie = function (name) {
            var arr = document.cookie.split('; ');
            for (var i = 0; i < arr.length; i++) {
                var arr2 = arr[i].split('=');
                if (arr2[0] == name) {
                    return decodeURI(arr2[1]);
                }
            }
            return '';
        };
        operationCookie.removeCookie = function (name) {
            var value = "";
            var iDay = -1;
            var oDate = new Date();
            value = encodeURIComponent(value);
            oDate.setDate(oDate.getDate() + iDay);
            document.cookie = name + '=' + value + ';expires=' + oDate;
            if (arguments[3] && typeof arguments[3] == 'function') {
                arguments[3]();
            }
            return operationCookie;
        };
        return operationCookie;
    })();
    //跨域post带cookie请求
    leFileUploadCommon.commonAjax = function (url, success, error, _ajaxOption) {
        var IAPIDocument = {
            apiUrl:url
        };
        leCommonAjax.ajax(IAPIDocument, success, error, _ajaxOption);
    };
    //leFileUploadCommon.commonAjax = function (url, success, error, _ajaxOption) {
    //    var ajaxOption = {
    //        url: url,
    //        type: "post",
    //        xhrFields: {
    //            withCredentials: true
    //        },
    //        crossDomain: true,
    //        dataType: "json",
    //        success: function (data) {
    //            if (success) {
    //                success(data);
    //            }
    //        },
    //        error: function (data) {
    //            if (error) {
    //                error(data);
    //            }
    //        }
    //    };
    //    if (_ajaxOption) {
    //        for (var item in _ajaxOption) {
    //            ajaxOption[item] = _ajaxOption[item];
    //        }
    //    }
    //    $.ajax(ajaxOption);
    //};
    return leFileUploadCommon;
})();
var leVideoUpload = (function () {
    //全部是必填,最后一个格式是:&sourceId=1&fileId=1 或者为空字符串
    function leVideoUpload(_uploadFile, _md5, _fileName, _fileSize, _parameter) {
        this.uploadFile = _uploadFile;
        this.md5 = _md5;
        this.fileName = _fileName;
        this.fileSize = _fileSize;
        this.parameter = _parameter || "";
    }
    leVideoUpload.prototype.cellSize = 10485760;
    leVideoUpload.prototype.sliceFile = function (file, start) {
        var _this = this;
        var blob;
        start = start || 0;
        var range = start + _this.cellSize;
        if (start != -1) {
            if (file.slice) {
                blob = file.slice(start, range);
            }
            else if (file.webkitSlice) {
                blob = file.webkitSlice(start, range);
            }
            else if (file.mozSlice) {
                blob = file.mozSlice(start, range);
            }
            else {
                blob = file;
            }
        }
        else {
            return file;
        }
        return blob;
    };
    leVideoUpload.prototype.xhr = null;
    leVideoUpload.prototype.cellStack = {};
    leVideoUpload.prototype.uploadUrl = "";
    leVideoUpload.prototype.streamUpload = function (loadedsize) {
        loadedsize = loadedsize * 1;
        var _this = this;
        _this.cellStack.transferedsize = loadedsize;
        _this.xhr = new XMLHttpRequest();
        _this.xhr.upload.addEventListener("progress", function (e) { _this.progress(e); }, false);
        _this.xhr.addEventListener("loadstart", function (e) { _this.loadstart(e); }, false);
        _this.xhr.addEventListener("load", function (e) { _this.load(e); }, false);
        _this.xhr.addEventListener("error", function (e) { _this.error(e); }, false);
        _this.xhr.addEventListener("abort", function (e) { _this.abort(e); }, false);
        var cellFile = _this.sliceFile(_this.uploadFile, loadedsize);
        var content = loadedsize == -1 ? "bytes *" : "bytes " + (loadedsize + 1) + "-" + (loadedsize + cellFile.size * 1) + "/" + _this.uploadFile.size;
        _this.xhr.open("POST", _this.uploadUrl, true);
        _this.xhr.setRequestHeader("X_FILENAME", encodeURIComponent(_this.uploadFile.name));
        _this.xhr.setRequestHeader("Content-Range", content);
        _this.xhr.send(cellFile);
    };
    leVideoUpload.prototype.xhrAbort = function () {
        var _this = this;
        _this.xhr && _this.xhr.abort();
    };
    leVideoUpload.prototype.fileId = "";//本次上传任务的唯一标识
    leVideoUpload.prototype.uploadSize = 100;//记录是否为刚开始上传
    leVideoUpload.prototype.tryUpload = function () {
        var _this = this;
        var file = _this.uploadFile;
        var initUrl = leVideoUpload.uploadOption.uploadInitUrl + "uploadType=1&videoName=" + encodeURIComponent(_this.fileName) + "&fileSize=" + _this.fileSize + _this.parameter;
        //initUrl += "&uc1=0&uc2=2&v720p=false&v1080p=false&panoramic=0";
        if (leFileUploadCommon.operationCookie.getCookie(_this.md5) && leFileUploadCommon.operationCookie.getCookie(_this.md5) != "undefined") {
            initUrl += "&token=" + leFileUploadCommon.operationCookie.getCookie(_this.md5);
            //initUrl += "&fileId=" + leFileUploadCommon.operationCookie.getCookie(_this.md5 + "fileId")
        }

        leFileUploadCommon.commonAjax(initUrl, function (data) {
            if (data.code * 1 == 200) {
                if (data.data && data.data.uploadUrl) {
                    _this.fileId = data.data.fileId || "";
                    _this.uploadUrl = data.data.uploadUrl.substr(0, data.data.uploadUrl.length - 10);
                    _this.uploadSize = data.data.uploadSize || 0;
                    var nextBlob = data.data.uploadSize || 0;

                    if (data.data.uploadSize == _this.fileSize) {
                        leVideoUpload.uploadOption.uploadFinish({ md5: _this.md5, code: 0, msg: "上传完成" });
                        leFileUploadCommon.operationCookie.removeCookie(_this.md5);
                        leFileUploadCommon.operationCookie.removeCookie(_this.md5 + "fileId");
                    } else {
                        _this.streamUpload(nextBlob);
                    }
                } else {
                    leVideoUpload.uploadOption.uploadError({ md5: _this.md5, code: 506, msg: "服务端返回参数异常" });
                }
            } else {
                leVideoUpload.uploadOption.uploadError({ md5: _this.md5, code: data.code, msg: (data.message || "失败请重试") });
            }
        }, function (data) {
            leVideoUpload.uploadOption.uploadError({ md5: _this.md5, code: 507, msg: "服务端异常,请重试" });
        }, { type: "post" });
    };

    //以下是回调函数相关
    leVideoUpload.prototype.loadstart = function (e) {
        var _this = this;
        var currStack = _this.cellStack;
        currStack.inittime = (new Date()).getTime(); //标记开始 即时的 时间
        var transferedsize = _this.cellStack ? _this.cellStack.transferedsize : 0;
        if (transferedsize == 0 || (_this.uploadSize && _this.uploadSize == transferedsize)) {
            delete _this.uploadSize;
            leVideoUpload.uploadOption.uploadStart({ md5: _this.md5, code: 0, msg: "开始上传" });
        }
        currStack.transferedsize = transferedsize;
    };
    leVideoUpload.prototype.load = function (e) {
        var _this = this;
        var res = eval("(" + e.target.responseText + ")");
        var file = _this.uploadFile;
        if (!!res.transferedsize) {
            _this.tryNumber = 0;
            //记录断点续传token
            var tokenUrl = _this.uploadUrl.split('token').pop();
            var videoToken = tokenUrl.substr(1, tokenUrl.length - 1);
            leFileUploadCommon.operationCookie.setCookie(_this.md5, videoToken, 2);
            leFileUploadCommon.operationCookie.setCookie(_this.md5 + "fileId", _this.fileId, 2);
            var transferedsize = parseInt(res.transferedsize);
            _this.cellStack.transferedsize = transferedsize;
            transferedsize < file.size && _this.streamUpload(transferedsize);
        }
        else {
            if (!res.totalsize && res.status != '200') {
                _this.xhrAbort();
                if (_this.tryNumber == 3) {
                    leVideoUpload.uploadOption.uploadError({ md5: _this.md5, code: res.status, msg: "存储服务器异常:" + res.msg });
                    leFileUploadCommon.operationCookie.removeCookie(_this.md5);
                    leFileUploadCommon.operationCookie.removeCookie(_this.md5 + "fileId");
                } else {
                    _this.tryNumber++;
                    setTimeout(function () {
                        _this.streamUpload(_this.cellStack.transferedsize);
                    }, 500 * _this.tryNumber + 1);
                }
            }
        }
        _this.cellStack.starttime = (new Date()).getTime();
        if (res.transferedsize && res.transferedsize == res.totalsize) {
            //文件上传完成
            leVideoUpload.uploadOption.uploadFinish({ md5: _this.md5, code: 0, msg: "上传完成" });
            leFileUploadCommon.operationCookie.removeCookie(_this.md5);
            leFileUploadCommon.operationCookie.removeCookie(_this.md5 + "fileId");
            _this.xhrAbort();
        }
    };
    leVideoUpload.prototype.progress = function (e) {
        var _this = this;
        var cellstack = _this.cellStack, filetransfered = parseInt(cellstack.transferedsize);
        var pc = parseInt((filetransfered + e.loaded) / _this.uploadFile.size * 100), delttime = ((new Date()).getTime() - (cellstack.starttime || cellstack.inittime)) / 1000, rate = e.loaded / delttime;
        rate = rate / 1024;
        rate = rate > 1024 ? (((rate / 1024 * 10) >> 0) / 10).toFixed(1) + "M/s" : (((rate * 10) >> 0) / 10).toFixed(1) + "K/s";
        //在上传过程中如果用户在电脑上删除了视频,会触发视频丢失错误
        if (isNaN(pc)) {
            leVideoUpload.uploadOption.uploadError({ md5: _this.md5, code: 203, msg: "视频丢失" });
            _this.xhrAbort();
        }
        else {
            if (pc == 100) {
                pc = 99;
            }
            //记录断点续传token
            //var tokenUrl = _this.uploadUrl.split('token').pop();
            //var videoToken = tokenUrl.substr(1, tokenUrl.length - 1);
            //if (leFileUploadCommon.operationCookie.getCookie(_this.md5) != videoToken) {
            //    leFileUploadCommon.operationCookie.setCookie(_this.md5, videoToken, 2);
            //    leFileUploadCommon.operationCookie.setCookie(_this.md5 + "fileId", _this.fileId, 2);
            //}
            leVideoUpload.uploadOption.uploadProgress({ md5: _this.md5, progress: pc + "%", speed: rate });
        }
    };
    leVideoUpload.prototype.tryNumber = 0;
    leVideoUpload.prototype.error = function (e) {
        var _this = this;
        _this.xhrAbort();
        if (_this.tryNumber == 3) {
            leVideoUpload.uploadOption.uploadError({ md5: _this.md5, code: 404, msg: "网络异常" });
        } else {
            _this.tryNumber++;
            setTimeout(function () {
                _this.streamUpload(_this.cellStack.transferedsize);
            }, 500 * _this.tryNumber + 1);
        }
    };
    leVideoUpload.prototype.abort = function (e) {
        var _this = this;
        leVideoUpload.uploadOption.uploadAbort({ md5: _this.md5, code: 439, msg: "上传终止" });
    };

    //上传的回调
    leVideoUpload.uploadOption = {};
    //使用前先调用初始化方法
    leVideoUpload.init = function (initOption) {
        leVideoUpload.uploadOption = initOption;
    };
    return leVideoUpload;
})();

//使用demo
/*
leVideoUpload.init({
    uploadInitUrl: "http://realapi.mms.lecloud.com/v1/inner/video/create.do",  //上传初始化地址
    uploadStart: function (data) {//上传开始回调

    },
    uploadProgress: function (data) { //进度回调

    },
    uploadFinish: function (data) { //上传完成回调

    },
    uploadError: function (data) { //上传错误回调

    },
    uploadAbort:function(data){  //上传中止
    
    }
});
*/
var vaasFileUpload = (function () {
    function vaasFileUpload() {
    }
    window.onbeforeunload = function (event) {
        if (vaasFileUpload.fileUploadList.length > 0) {
            return vaasFileUpload.LCT("有未上传完成的文件!离开此页面数据将会丢失!");
        }
    };
    //获取文件名称
    vaasFileUpload.getFileName = function (name) {
        return name;
    };
    //计算文件大小
    vaasFileUpload.calculateFileSize = function (file) {
        var fSize = file.size / 1024;
        fSize = fSize > 1024 ? (((fSize / 1024 * 10) >> 0) / 10).toFixed(1) + "M" : (((fSize * 10) >> 0) / 10).toFixed(1) + "K";
        return fSize;
    };
    //通用弹层
    vaasFileUpload.modalAlert = function (msg) {
        $("#leFileUpload_msg").html(msg);
        $("#leFileUpload_Modal").modal("show");
    };
    //文件上传列表
    vaasFileUpload.fileUploadList = [];
    //获取文件上传列表下标
    vaasFileUpload.getFileUploadListIndex = function (md5) {
        for (var i = 0; i < vaasFileUpload.fileUploadList.length; i++) {
            if (vaasFileUpload.fileUploadList[i].md5 == md5) {
                return i;
            }
        }
        return "nothing";
    };
    //查看是否可以上传
    vaasFileUpload.lookIsNotUpload = function () {
        var temp = 0;
        $("li[uploading='uploading']").each(function () {
            temp++;
        });
        if (temp > 0) {
            return false;
        } else {
            return true;
        }
    };
    //初始化传递过来的对象
    vaasFileUpload.initOptionObject = {};
    //当次选中文件的对象
    vaasFileUpload.addFileCallback = function (data) {
        var modalAlert = false;
        for (var item in vaasFileUpload.initOptionObject.leFileOperation.fileUploadList) {
            var tempItemObj = vaasFileUpload.initOptionObject.leFileOperation.fileUploadList[item]
            var isnotPush = true;
            for (var y = 0; y < vaasFileUpload.fileUploadList.length; y++) {
                if (tempItemObj.md5 == vaasFileUpload.fileUploadList[y].md5) {
                    isnotPush = false;
                    break;
                }
            }
            if (isnotPush) {
                var md5IsNotLength = $("#uploader_upload_list").find("li[id='" + tempItemObj.md5 + "']").length;
                if (md5IsNotLength > 0) {
                    $("#" + tempItemObj.md5).find("small[uploadPercent='uploadPercent']").html(vaasFileUpload.LCT("已经上传过的视频"));
                    $("#" + tempItemObj.md5).find("small[uploadPercent='uploadPercent']").css({
                        color: "red"
                    });
                    break;
                }
                var fileName = vaasFileUpload.getFileName(tempItemObj.fileName || tempItemObj.file.name);
                var fileSize = tempItemObj.file.size;
                vaasFileUpload.initOptionObject.leFileOperation.fileUploadList[item].fileUpload = new leVideoUpload(tempItemObj.file, tempItemObj.md5, fileName, fileSize, tempItemObj.parameter);
                vaasFileUpload.fileUploadList.push(vaasFileUpload.initOptionObject.leFileOperation.fileUploadList[item]);

                var file = tempItemObj.file;
                var fileName = vaasFileUpload.getFileName(tempItemObj.fileName || file.name);
                var fileSize = vaasFileUpload.calculateFileSize(file);
                vaasFileUpload.addFileItemElement(tempItemObj.md5, fileName, fileSize);
                modalAlert = true;
            }
        }
        if (modalAlert) {
            $("#modal-upload").removeClass("hide");
            $(".modal-upload-body").slideDown();
            $("#uploadListModalMin").removeClass("modal-min").addClass("modal-max");//弹出框
        }
        var firstFileMd5 = 0;
        for (var item in vaasFileUpload.initOptionObject.leFileOperation.fileUploadList) {
            firstFileMd5 = vaasFileUpload.initOptionObject.leFileOperation.fileUploadList[item].md5;
            break;
        }
        vaasFileUpload.initOptionObject.leFileOperation.fileUploadList = {};
        if (vaasFileUpload.lookIsNotUpload() && vaasFileUpload.fileUploadList.length > 0) {
            var index = vaasFileUpload.getFileUploadListIndex(firstFileMd5);
            if (index != "nothing") {
                var domMd5Id = vaasFileUpload.fileUploadList[index].fileUpload.md5;
                if ($("#" + domMd5Id).find("input[stopItem='stopItem']").hasClass("active")) {
                    $("#" + domMd5Id).attr("uploading", "uploading");
                    vaasFileUpload.fileUploadList[index].fileUpload.tryUpload();
                } else {
                    $("input[stopItem='stopItem']").removeAttr("disabled");
                }
            }
        }
    };
    //构建右下角弹层
    vaasFileUpload.structurePageElement = function () {
        var element = '<div class="modal-content modal-upload-zj hide" id="modal-upload">' +
                        '<div class="modal-header modal-header-primary clearfix">' +
                            '<div class="modal-control pull-right modal-max" id="uploadListModalMin">' +
                                '<span class="modal-icon"></span>' +
                            '</div>' +
                            '<h4 class="modal-title-vod pull-left">' + vaasFileUpload.LCT("视频上传列表") + '</h4>' +
                        '</div>' +

                        '<div class="modal-upload-body">' +
                            '<div class="modal-upload-header clearfix">' +
                                '<div class="video-name-vod pull-left">' + vaasFileUpload.LCT("视频名称") + '</div>' +
                                '<div class="video-size pull-left">' + vaasFileUpload.LCT("视频大小") + '</div>' +
                                '<div class="video-status pull-left video-header-height">' + vaasFileUpload.LCT("上传状态") + '</div>' +
                                '<div class="video-operate pull-left">' + vaasFileUpload.LCT("操作") + '</div>' +
                            '</div>' +
                            '<div class="uploader-list" id="uploader-list">' +
                                '<ul id="uploader_upload_list">' +
                                '</ul>' +
                            '</div>' +
                        '</div>' +
                    '</div>';
        $("body").append(element);
        //展开/关闭
        $("body").on("click", ".modal-control", function (e) {
            if ($(this).hasClass("modal-max")) {
                $(".modal-upload-body").slideUp();
                $(this).removeClass("modal-max").addClass("modal-min");
            } else {
                $(".modal-upload-body").slideDown();
                $(this).removeClass("modal-min").addClass("modal-max");
            }
        });

        //构建弹层
        var modalDomStr = '<div id="leFileUpload_Modal" class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel">' +
                                '<div class="modal-dialog modal-sm">' +
                                    '<div class="modal-content" id="leFileUpload_msg">' +

                                    '</div>' +
                                '</div>' +
                            '</div>';
        $("body").append(modalDomStr);
    };
    //添加一条上传显示行
    vaasFileUpload.addFileItemElement = function (md5, fileName, fileSize) {
        var src = '<li id="' + md5 + '" uploading="">' +
				    '<div class="info clearfix">' +
				        '<div class="video-name-vod pull-left" title="' + fileName + '">' + fileName + '</div>' +
				        '<div class="video-size pull-left">' + fileSize + '</div>' +
				        '<div class="video-status pull-left">' +
				            '<small class="ml-10" uploadPercent="uploadPercent">0%</small>' +
				            '<div class="progress progress-sm">' +
				                '<div uploadProgressbar="uploadProgressbar" class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div>' +
				            '</div>' +
				            '<small class="text-qianlan" uploadSpeed="uploadSpeed">' + vaasFileUpload.LCT("等待上传") + '</small>' +
				        '</div>' +
				        '<div class="video-operate pull-left mt-20">' +
				            '<input class="icon-video-play active" type="button" stopItem="stopItem" disabled="disabled" >' +
				            '<input class="icon-video-del ml-15" type="button" deleteItem="deleteItem">' +
				        '</div>' +
				    '</div>' +
				'</li>';
        $("#uploader_upload_list").append(src);
    };
    //暂停标识
    vaasFileUpload.stopMd5 = "";
    //绑定页面元素的事件
    vaasFileUpload.bindWebPageHandle = function () {
        vaasFileUpload.structurePageElement();
        $("#uploader_upload_list").on("click", "input[stopItem='stopItem']", function () {
            $(this).prop("disabled", "disabled");
            $("input[stopItem='stopItem']").prop("disabled", "disabled");
            var md5 = $($(this).parents("li")).attr("id");
            var index = vaasFileUpload.getFileUploadListIndex(md5);
            if ($(this).hasClass("active")) {
                $(this).removeClass("active");
                vaasFileUpload.stopMd5 = md5;
                $("#" + md5).find("div[uploadProgressbar='uploadProgressbar']").css({ "backgroundColor": "#337ab7" });//失败是 #fa5258
                $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("class", "text-qianlan").html("0KB/S");
                $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("title", "0KB/S");
                vaasFileUpload.stopMd5 = md5;
                vaasFileUpload.fileUploadList[index].fileUpload.xhrAbort();
                vaasFileUpload.stopMd5 = md5;
                if (vaasFileUpload.fileUploadList.length > (index + 1)) {
                    if (vaasFileUpload.lookIsNotUpload()) {
                        var domMd5Id = vaasFileUpload.fileUploadList[index + 1].fileUpload.md5;
                        if ($("#" + domMd5Id).find("input[stopItem='stopItem']").hasClass("active")) {
                            $("#" + domMd5Id).attr("uploading", "uploading");
                            vaasFileUpload.fileUploadList[index + 1].fileUpload.tryUpload();
                        } else {
                            $("input[stopItem='stopItem']").removeAttr("disabled");
                        }
                    }
                } else {
                    $("input[stopItem='stopItem']").removeAttr("disabled");
                }
            } else {
                $(this).addClass("active");
                //$("input[stopItem='stopItem']").addClass("active");
                if (vaasFileUpload.lookIsNotUpload()) {
                    var domMd5Id = vaasFileUpload.fileUploadList[index].fileUpload.md5;
                    if ($("#" + domMd5Id).find("input[stopItem='stopItem']").hasClass("active")) {
                        $("#" + domMd5Id).attr("uploading", "uploading");
                        vaasFileUpload.fileUploadList[index].fileUpload.tryUpload();
                    } else {
                        $("input[stopItem='stopItem']").removeAttr("disabled");
                    }
                }
            }
        });
        $("#uploader_upload_list").on("click", "input[deleteItem='deleteItem']", function () {
            var md5 = $($(this).parents("li")).attr("id");
            vaasFileUpload.uploadDelete(md5);
        });
    };
    //上传错误的回调
    vaasFileUpload.uploadError = function (md5, msg) {
        var index = vaasFileUpload.getFileUploadListIndex(md5);
        $("#" + md5).find("div[uploadProgressbar='uploadProgressbar']").css({ "backgroundColor": "#fa5258" });//正常是 #337ab7
        $("#" + md5).find("input[stopItem='stopItem']").removeClass("active");
        $("#" + md5).find("input[stopItem='stopItem']").prop("disabled", "disabled");
        $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("class", "text-danger").html(msg);
        $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("title", msg);
        if (vaasFileUpload.fileUploadList.length > (index + 1)) {
            if (vaasFileUpload.lookIsNotUpload()) {
                var domMd5Id = vaasFileUpload.fileUploadList[index + 1].fileUpload.md5;
                if ($("#" + domMd5Id).find("input[stopItem='stopItem']").hasClass("active")) {
                    $("#" + domMd5Id).attr("uploading", "uploading");
                    vaasFileUpload.fileUploadList[index + 1].fileUpload.tryUpload();
                } else {
                    $("input[stopItem='stopItem']").removeAttr("disabled");
                }
            }
        } else {
            $("input[stopItem='stopItem']").removeAttr("disabled");
        }
    };
    //进度的回调
    vaasFileUpload.uploadProgress = function (md5, uploadPercent, uploadSpeed) {
        $("#" + md5).find("div[uploadProgressbar='uploadProgressbar']").css({ "backgroundColor": "#337ab7", "width": uploadPercent });//失败是 #fa5258
        $("#" + md5).find("small[uploadPercent='uploadPercent']").html(uploadPercent);
        $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("class", "text-qianlan").html(uploadSpeed);
        $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("title", uploadSpeed);
        if (vaasFileUpload.stopMd5) {
            $("#" + md5).find("small[uploadSpeed='uploadSpeed']").html("0KB/S");
            $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("title", "0KB/S");
            vaasFileUpload.stopMd5 = "";
        }
    };
    //上传完成回调
    vaasFileUpload.uploadFinish = function (md5) {
        $("#" + md5).find("div[uploadProgressbar='uploadProgressbar']").css({ "backgroundColor": "#337ab7", "width": "100%" });//失败是 #fa5258
        $("#" + md5).find("small[uploadPercent='uploadPercent']").html("100%");
        $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("class", "text-success").html(vaasFileUpload.LCT("已上传"));
        $("#" + md5).find("small[uploadSpeed='uploadSpeed']").attr("title", vaasFileUpload.LCT("已上传"));
        $("#" + md5).find("input[stopItem='stopItem']").hide();

        var index = vaasFileUpload.getFileUploadListIndex(md5);
        vaasFileUpload.fileUploadList[index].fileUpload.xhrAbort();
        vaasFileUpload.fileUploadList.remove(index);
        if (vaasFileUpload.fileUploadList.length != index && vaasFileUpload.fileUploadList.length > index) {
            if (vaasFileUpload.lookIsNotUpload()) {
                var domMd5Id = vaasFileUpload.fileUploadList[index].fileUpload.md5;
                if ($("#" + domMd5Id).find("input[stopItem='stopItem']").hasClass("active")) {
                    $("#" + domMd5Id).attr("uploading", "uploading");
                    vaasFileUpload.fileUploadList[index].fileUpload.tryUpload();
                } else {
                    $("input[stopItem='stopItem']").removeAttr("disabled");
                }
            }
        } else {
            $("input[stopItem='stopItem']").removeAttr("disabled");
            $("input[stopItem='stopItem']").removeClass("active");
        }
    };
    //上传删除
    vaasFileUpload.uploadDelete = function (md5) {
        try { //单独为恶心的媒资添加处理
            if (vaasFileUpload.initOptionObject.uploadStatusCallback) {
                var index = vaasFileUpload.getFileUploadListIndex(md5);
                var tempFileId = vaasFileUpload.fileUploadList[index].fileUpload.fileId;
                vaasFileUpload.initOptionObject.uploadStatusCallback({ code: 438, md5: md5, msg: "删除", fileId: tempFileId });
            }
        } catch (e) {
        }

        $("#" + md5).remove();
        //隐藏弹出层
        if ($("#uploader_upload_list").html().trim() == "") {
            $("#modal-upload").addClass("hide");
        }
        //此处中断上传
        if (vaasFileUpload.fileUploadList.length > 0) {
            var index = vaasFileUpload.getFileUploadListIndex(md5);
            if (index != "nothing") {
                vaasFileUpload.fileUploadList[index].fileUpload.xhrAbort();
                vaasFileUpload.fileUploadList.remove(index);
                if (vaasFileUpload.lookIsNotUpload()) {
                    if (vaasFileUpload.fileUploadList.length != index && vaasFileUpload.fileUploadList.length > index) {
                        var domMd5Id = vaasFileUpload.fileUploadList[index].fileUpload.md5;
                        if ($("#" + domMd5Id).find("input[stopItem='stopItem']").hasClass("active")) {
                            $("#" + domMd5Id).attr("uploading", "uploading");
                            vaasFileUpload.fileUploadList[index].fileUpload.tryUpload();
                        } else {
                            $("input[stopItem='stopItem']").removeAttr("disabled");
                        }
                    } else {
                        //if (vaasFileUpload.fileUploadList.length > 0) {
                        //    var domMd5Id = vaasFileUpload.fileUploadList[0].fileUpload.md5;
                        //    $("#" + domMd5Id).attr("uploading", "uploading");
                        //    vaasFileUpload.fileUploadList[0].fileUpload.tryUpload();
                        //} else {
                        //    $("input[stopItem='stopItem']").removeAttr("disabled");
                        //}
                        $("input[stopItem='stopItem']").removeAttr("disabled");
                    }
                }
            } else {
                if (vaasFileUpload.lookIsNotUpload()) {
                    if (index != "nothing") {
                        if (vaasFileUpload.fileUploadList.length != index && vaasFileUpload.fileUploadList.length > index) {
                            var domMd5Id = vaasFileUpload.fileUploadList[index].fileUpload.md5;
                            if ($("#" + domMd5Id).find("input[stopItem='stopItem']").hasClass("active")) {
                                $("#" + domMd5Id).attr("uploading", "uploading");
                                vaasFileUpload.fileUploadList[index].fileUpload.tryUpload();
                            } else {
                                $("input[stopItem='stopItem']").removeAttr("disabled");
                            }
                        } else {
                            $("input[stopItem='stopItem']").removeAttr("disabled");
                        }
                    } else {
                        //if (vaasFileUpload.fileUploadList.length > 0) {
                        //    var domMd5Id = vaasFileUpload.fileUploadList[0].fileUpload.md5;
                        //    $("#" + domMd5Id).attr("uploading", "uploading");
                        //    vaasFileUpload.fileUploadList[0].fileUpload.tryUpload();
                        //} else {
                        //    $("input[stopItem='stopItem']").removeAttr("disabled");
                        //}
                        $("input[stopItem='stopItem']").removeAttr("disabled");
                    }
                }
            }
        } else {
            $("input[stopItem='stopItem']").removeAttr("disabled");
        }
    };
    //初始化上传文件的对象、
    vaasFileUpload.initLeVideoUpload = function () {
        leVideoUpload.init({
            uploadInitUrl: vaasFileUpload.initOptionObject.uploadInitUrl,  //上传初始化地址
            uploadStart: function (data) {//上传开始回调
                window.poling = setInterval(function () {
                    leFileUploadCommon.commonAjax(vaasFileUpload.initOptionObject.polingUrl + "?timeStamp=" + (new Date()).getTime(), function (data) {
                    }, function (data) {
                    }, { cache: false });
                }, 60000 * 3);
                try {
                    if (vaasFileUpload.initOptionObject.uploadStatusCallback) {
                        var index = vaasFileUpload.getFileUploadListIndex(data.md5);
                        var tempFileId = vaasFileUpload.fileUploadList[index].fileUpload.fileId;
                        vaasFileUpload.initOptionObject.uploadStatusCallback({ code: 200, md5: data.md5, msg: "上传开始", fileId: tempFileId });
                    }
                } catch (e) {
                }
                $("#" + data.md5).find("input[stopItem='stopItem']").removeAttr("disabled");
            },
            uploadProgress: function (data) { //进度回调
                vaasFileUpload.uploadProgress(data.md5, data.progress, data.speed);
                try {
                    if (vaasFileUpload.initOptionObject.uploadStatusCallback) {
                        var index = vaasFileUpload.getFileUploadListIndex(data.md5);
                        var tempFileId = vaasFileUpload.fileUploadList[index].fileUpload.fileId;
                        vaasFileUpload.initOptionObject.uploadStatusCallback({ code: 4, md5: data.md5, msg: "上传中", fileId: tempFileId, progress: data.progress, speed: data.speed });
                    }
                } catch (e) {

                }
            },
            uploadFinish: function (data) { //上传完成回调
                clearInterval(window.poling);
                $("#" + data.md5).attr("uploading", "");
                try {
                    if (vaasFileUpload.initOptionObject.uploadStatusCallback) {
                        var index = vaasFileUpload.getFileUploadListIndex(data.md5);
                        var tempFileId = vaasFileUpload.fileUploadList[index].fileUpload.fileId;
                        vaasFileUpload.initOptionObject.uploadStatusCallback({ code: 201, md5: data.md5, msg: "上传完成", fileId: tempFileId });
                    }
                } catch (e) {
                }
                vaasFileUpload.uploadFinish(data.md5);
            },
            uploadError: function (data) { //上传错误回调
                clearInterval(window.poling);
                $("#" + data.md5).attr("uploading", "");
                try {
                    if (vaasFileUpload.initOptionObject.uploadStatusCallback) {
                        var index = vaasFileUpload.getFileUploadListIndex(data.md5);
                        var tempFileId = vaasFileUpload.fileUploadList[index].fileUpload.fileId;
                        vaasFileUpload.initOptionObject.uploadStatusCallback({ code: 400, md5: data.md5, msg: "上传错误", fileId: tempFileId });
                    }
                } catch (e) {
                }
                vaasFileUpload.uploadError(data.md5, vaasFileUpload.LCT(data.msg));
            },
            uploadAbort: function (data) { //中止上传
                clearInterval(window.poling);
                $("#" + data.md5).attr("uploading", "");
            }
        });
    };
    //初始化选择文件的对象
    vaasFileUpload.initLeFileOperation = function () {
        vaasFileUpload.initOptionObject.leFileOperation.init({
            multipleDomElement: vaasFileUpload.initOptionObject.multipleDomElement,//一次允许选择多个文件,需要传递页面元素对象
            multipleCallback: vaasFileUpload.initOptionObject.multipleCallback,//如果需要额外加什么参数在这里设置如果不需要则 return "";
            videoUpload_fileList: vaasFileUpload.fileUploadList,    //上传列表中现有的文件列表
            addFileCallback: vaasFileUpload.addFileCallback,   //本次选择文件的回调函数
            fileTypes: vaasFileUpload.initOptionObject.fileTypes,//支持的文件类型
        });
    };
    //语言
    vaasFileUpload.language = "zh_cn";
    vaasFileUpload.LCT = function (chinese) {
        if (vaasFileUpload.language == "zh_cn") {
            return chinese;
        }
        var local_language = {
            "大小为0的文件": "The file size is 0",
            "文件已在上传列表当中": "File already exists in the upload list",
            "不支持的视频格式": "Unsupported video format",
            "选择了相同的文件": "Have the same file(in the selected files)",
            "视频名称不合法": "Video name irregularities",
            "成功": "Success",
            "上传完成": "completed",
            "服务端返回参数异常": "Server exception",
            "服务端异常": "Server exception",
            "开始上传": "Start uploading",
            "存储服务器异常": "Storage server exception",
            "视频丢失": "Video loss",
            "网络异常": "Network exception",
            "上传终止": "Stop uploading",
            "有未上传完成的文件!离开此页面数据将会丢失!": "There is an upload file! Leaving the page your data will be lost!",
            "已经上传过的视频": "Uploaded",
            "视频上传列表": "Video upload list",
            "视频名称": "Name",
            "视频大小": "Size",
            "上传状态": "Status",
            "操作": "Action",
            "等待上传": "Waiting",
            "已上传": "Uploaded",
            "开始上传": "Start uploading",
            "上传中": "Uploading"
        };
        if (chinese.indexOf("存储服务器异常") > 0) {
            chinese = "存储服务器异常";
        }
        return local_language[chinese];
    };
    //使用前先调用初始化方法
    vaasFileUpload.init = function (initOption) {
        vaasFileUpload.language = initOption.language || "zh_cn";
        vaasFileUpload.initOptionObject = initOption;
        // vaasFileUpload.initLeFileOperation();
        vaasFileUpload.initLeVideoUpload();
        vaasFileUpload.bindWebPageHandle();
    };
    return vaasFileUpload;
})();

//demo
/*
vaasFileUpload.init({
    leFileOperation: leFileOperation, // 把 leFileOperation传过来
    uploadInitUrl:"http://realapi.mms.lecloud.com/v1/inner/video/create.do",//上传初始化地址
    polingUrl:"http://mms.lecloud.com/videoController/refreshSessionTime.do",// 心跳地址
    uploadStatusCallback:function(){}//上传状态回调
});
*/
var videoUploadUI = (function () {
    function videoUploadUI() {
    }
    videoUploadUI.uploadConfig = (function () {
        function uploadConfig() { }
        uploadConfig.config = {
            panoramic: false,
            v720p: false,
            v1080p: false
        };
        uploadConfig.init = function () {
            videoUploadDAL.upoadConfig(function (successData) {
                for (var item in uploadConfig.config) {
                    uploadConfig.config[item] = successData[item]
                }
                if (!successData.panoramic) {
                    $("[allQuanJing='allQuanJing']").addClass("hide");
                }
                if (successData.v1080p == false && successData.v720p == false) {
                    $("[allZhuangTai='allZhuangTai']").addClass("hide");
                }
                if (!successData.v720p) {
                    $("div[allv720p='allv720p']").addClass("hide");
                }
                if (!successData.v1080p) {
                    $("div[allv1080p='allv1080p']").addClass("hide");
                }
            }, function () { });
        };
        return uploadConfig;
    })();

    videoUploadUI.showOrHideSelect = function (command) {
        if (command == "show") {
            $("#fileSelectButton").removeClass("hide");
            $("#uploadVideoBtn").removeClass("btn-ipt-blue").addClass("btn-ipt-hui");
            $("#selectAllDelete").addClass("disable");
        } else {
            $("#fileSelectButton").addClass("hide");
            $("#uploadVideoBtn").removeClass("btn-ipt-hui").addClass("btn-ipt-blue");
            $("#selectAllDelete").removeClass("disable");
        }
    };
    videoUploadUI.fileNameDeleteType = function (fileName) {
        var returnStr = fileName;
        var tempArr = returnStr.split('.');
        if (tempArr.length > 1) {
            tempArr.length--;
        }
        returnStr = tempArr.join('.');
        return returnStr;
    };
    videoUploadUI.addOneData = function (data) {
        var dom = '<tr md5="' + data.md5 + '">' +
                    '<td>' +
                        '<div class="pull-left"><input type="text" class="common-input-style" maxlength="60" videoName="videoName" style="width:190px;" value="' + videoUploadUI.fileNameDeleteType(data.file.name) + '"></div><div class="pull-left icon-box mr-10 ml-10"><svg class="icon icon-gou size-14 svg-duihao pull-left"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-gou"></use></svg></div><div class="pull-left icon-box"><svg class="icon icon-guanbi size-12 svg-cha pull-right"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-guanbi"></use></svg></div>' +
                    '</td>' +
                    '<td><div class="td-2">' + leFileOperation.calculateFileSize(data.file) + '</div></td>' +
                    '<td v720pAndv1080p="v720pAndv1080p">' +
                        '<div v720p="v720p" class="icheckbox pull-left"><input type="checkbox" 720P="720P">720P</div>' +
                        '<div v1080p="v1080p" class="icheckbox pull-left"><input type="checkbox" 1080P="1080P">1080P</div>' +
                    '</td>' +
                    '<td class="list-td">' +
                        '<div class="common-pull-down pull-left color-73737c mt-5 mr-5 width-100" oneSingleClass="oneSingleClass">' +
                            '<div class="pull-down-head height-md-30" oneSingleClassHead="oneSingleClassHead">' +
                                '<span class="display-i-b width-all text-hide" oneSingleClassHeadShow="oneSingleClassHeadShow" oneClass="0">--请选择--</span>' +
                                '<i class="ml-10 icon-arrow" style="top: 13px;"><svg class="icon icon-arrow-down size-8 gray-33333c"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-arrow-down"></use></svg></i>' +
                            '</div>' +
                            '<ul class="pl-10 pr-10 list-down text-left" style="top:29px;max-height: 200px;overflow:auto;" oneSingleClassListDown="oneSingleClassListDown">' +
                                '<li oneClass="0" class="active">--请选择--</li>' +
                            '</ul>' +
                        '</div>' +
                        '<div class="common-pull-down pull-left color-73737c mt-5 width-100" twoSingleClass="twoSingleClass">' +
                            '<div class="pull-down-head height-md-30" twoSingleClassHead="twoSingleClassHead">' +
                                '<span class="display-i-b width-all text-hide" twoSingleClassHeadShow="twoSingleClassHeadShow" twoClass="0">--请选择--</span>' +
                                '<i class="ml-10 icon-arrow" style="top: 13px;"><svg class="icon icon-arrow-down size-8 gray-33333c"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-arrow-down"></use></svg></i>' +
                            '</div>' +
                            '<ul class="pl-10 pr-10 list-down text-left" style="top:29px;max-height: 200px;overflow:auto;" twoSingleClassListDown="twoSingleClassListDown">' +
                                '<li twoClass="0" class="active">--请选择--</li>' +
                            '</ul>' +
                        '</div>' +
                    '</td>' +
                    '<td panoramicAttr="panoramicAttr">' +
                        '<div class="icheckbox pull-left"><input type="checkbox" panoramic="panoramic">全景视频</div>' +
                    '</td>' +
                    '<td class="del-td">' +
                        '<a href="javascript:void(0)" selectTbodyDelete="selectTbodyDelete">删除</a>' +
                    '</td>' +
                '</tr>';
        $("#videoSelectTbody").append(dom);
        $("#videoSelectTbody").find("tr[md5='" + data.md5 + "']").find("ul[oneSingleClassListDown='oneSingleClassListDown']").html(videoUploadUI.globalDom);
        leDropDownFold.config("videoSelectTbody tr[md5='" + data.md5 + "'] div[oneSingleClass='oneSingleClass']", function (parentId) {
            $("#" + parentId).toggleClass("active");
        });
        leDropDownFold.config("videoSelectTbody tr[md5='" + data.md5 + "'] div[twoSingleClass='twoSingleClass']", function (parentId) {
            $("#" + parentId).toggleClass("active");
        });

        $("#videoSelectTbody").find("tr[md5='" + data.md5 + "']").find("input").iCheck({
            checkboxClass: 'icheckbox_square-blue',
            radioClass: 'iradio_square-blue',
            increaseArea: '20%',// optional
        });
        if (!videoUploadUI.uploadConfig.config.panoramic) {
            $("#videoSelectTbody").find("tr[md5='" + data.md5 + "']").find("td[panoramicAttr='panoramicAttr']").addClass("hide");
        }
        if (videoUploadUI.uploadConfig.config.v1080p == false && videoUploadUI.uploadConfig.config.v720p == false) {
            $("#videoSelectTbody").find("tr[md5='" + data.md5 + "']").find("td[v720pAndv1080p='v720pAndv1080p']").addClass("hide");
        }
        if (!videoUploadUI.uploadConfig.config.v720p) {
            $("#videoSelectTbody").find("tr[md5='" + data.md5 + "']").find("div[v720p='v720p']").addClass("hide");
        }
        if (!videoUploadUI.uploadConfig.config.v1080p) {
            $("#videoSelectTbody").find("tr[md5='" + data.md5 + "']").find("div[v1080p='v1080p']").addClass("hide");
        }
    };

    videoUploadUI.bindWebPageEvent = function () {
        $("#videoSelectTbody").on("click", "a[selectTbodyDelete='selectTbodyDelete']", function () {
            var md5 = $(this).parents("tr").attr("md5");
            delete leFileOperation.fileUploadList[md5];
            $(this).parents("tr").remove();
            if ($("#videoSelectTbody").find("tr[md5]").length == 0) {
                videoUploadUI.showOrHideSelect("show");
            }
        });
        //全部删除
        $("#selectAllDelete").on("click", function () {
            if ($(this).hasClass("disable")) {
                return;
            } else {
                $("#videoSelectTbody").find("tr[md5]").each(function () {
                    var md5 = $(this).attr("md5");
                    delete leFileOperation.fileUploadList[md5];
                });
                $("#videoSelectTbody").find("tr[md5]").remove();
                videoUploadUI.showOrHideSelect("show");
            }
        });
        //全部720p
        $("#all720P").on("ifChecked", function () {
            $("input[720P='720P']").each(function () {
                if (!this.disabled) {
                    $(this).iCheck("check");
                }
            });
            //$("input[720P='720P']").iCheck("check");
        });
        $("#all720P").on("ifUnchecked", function () {
            $("input[720P='720P']").each(function () {
                if (!this.disabled) {
                    $(this).iCheck("uncheck");
                }
            });
            //$("input[720P='720P']").iCheck("uncheck");
        });
        //全部1080p
        $("#all1080P").on("ifChecked", function () {
            $("input[1080P='1080P']").each(function () {
                if (!this.disabled) {
                    $(this).iCheck("check");
                }
            });
            //$("input[1080P='1080P']").iCheck("check");
        });
        $("#all1080P").on("ifUnchecked", function () {
            $("input[1080P='1080P']").each(function () {
                if (!this.disabled) {
                    $(this).iCheck("uncheck");
                }
            });
            //$("input[1080P='1080P']").iCheck("uncheck");
        });
        //全部全景
        $("#allPanoramic").on("ifChecked", function () {
            $("input[panoramic='panoramic']").iCheck("check");
            $("#all1080P").iCheck("uncheck");
            $("#all720P").iCheck("uncheck");
            $("#all1080P").iCheck("disable");
            $("#all720P").iCheck("disable");
        });
        $("#allPanoramic").on("ifUnchecked", function () {
            $("input[panoramic='panoramic']").iCheck("uncheck");
            $("#all1080P").iCheck("enable");
            $("#all720P").iCheck("enable");
        });
        //单个全景选中
        $("#videoSelectTbody").on("ifChecked", "input[panoramic='panoramic']", function () {
            $(this).parents("tr").find("input[1080P='1080P']").iCheck("uncheck");
            $(this).parents("tr").find("input[720P='720P']").iCheck("uncheck");
            $(this).parents("tr").find("input[1080P='1080P']").iCheck("disable");
            $(this).parents("tr").find("input[720P='720P']").iCheck("disable");
        });
        $("#videoSelectTbody").on("ifUnchecked", "input[panoramic='panoramic']", function () {
            $(this).parents("tr").find("input[1080P='1080P']").iCheck("enable");
            $(this).parents("tr").find("input[720P='720P']").iCheck("enable");
        });



        //上传
        $("#uploadVideoBtn").on("click", function () {
            if ($(this).hasClass("btn-ipt-hui")) {
                return;
            } else {
                var notUpload = false;
                $("#videoSelectTbody").find("tr[md5]").find("input[videoName='videoName']").each(function () {
                    var videoName = $(this).val().trim();
                    var md5 = $(this).parents("tr").attr("md5");
                    if (videoName == "") {
                        //当前视频列表中有名称相同的视频
                        leToolFunction.showAlertTip("当前视频列表中有名称为空的视频");
                        notUpload = true;
                        return;
                    } else {
                        leFileOperation.fileUploadList[md5].fileName = videoName;
                        leFileOperation.fileUploadList[md5].parameter += "&v720p=" + $("tr[md5='" + md5 + "']").find("input[720P='720P']")[0].checked;
                        leFileOperation.fileUploadList[md5].parameter += "&v1080p=" + $("tr[md5='" + md5 + "']").find("input[1080P='1080P']")[0].checked;
                        leFileOperation.fileUploadList[md5].parameter += "&panoramic=" + ($("tr[md5='" + md5 + "']").find("input[panoramic='panoramic']")[0].checked ? 1 : 0);
                        leFileOperation.fileUploadList[md5].parameter += "&uc1=" + $("tr[md5='" + md5 + "']").find("span[oneSingleClassHeadShow='oneSingleClassHeadShow']").attr("oneClass");
                        leFileOperation.fileUploadList[md5].parameter += "&uc2=" + $("tr[md5='" + md5 + "']").find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").attr("twoClass");
                    }
                });
                if (!notUpload) {
                    $("#videoSelectTbody").find("tr[md5]").remove();
                    videoUploadUI.showOrHideSelect("show");
                    vaasFileUpload.addFileCallback();
                }
            }
        });


        leDropDownFold.config("oneSelectAll", function (parentId) {
            $("#oneSelectAll").toggleClass("active");
        });
        leDropDownFold.config("twoSelectAll", function (parentId) {
            $("#twoSelectAll").toggleClass("active");
        });
        //批量一级分类
        $("#oneSelectAllHead").on("click", function () {
            $("#oneSelectAll").toggleClass("active");
            if ($("#oneSelectAll").hasClass("active")) {
                leDropDownFold.startUsing("oneSelectAll");
            } else {
                leDropDownFold.destroy("oneSelectAll");
            }
        });
        $("#oneSelectAllListDown").on("click", "li", function () {
            $("#oneSelectAll").toggleClass("active");
            leDropDownFold.destroy("oneSelectAll");
            $("#oneSelectAllListDown").find("li").removeClass("active");
            $(this).addClass("active");

            $("#videoSelectTbody").find("tr[md5]").find("ul[oneSingleClassListDown='oneSingleClassListDown'] li").removeClass("active");
            $("#videoSelectTbody").find("tr[md5]").find("ul[oneSingleClassListDown='oneSingleClassListDown']").find("li[twoClass='" + $(this).attr("twoClass") + "']").addClass("active");

            $("#oneSelectAllHeadShow").html($(this).html());
            $("#oneSelectAllHeadShow").attr("oneClass", $(this).attr("oneClass"));
            $("#videoSelectTbody").find("tr[md5]").find("span[oneSingleClassHeadShow='oneSingleClassHeadShow']").html($(this).html());
            $("#videoSelectTbody").find("tr[md5]").find("span[oneSingleClassHeadShow='oneSingleClassHeadShow']").attr("oneClass", $(this).attr("oneClass"));

            $("#twoSelectAllHeadShow").html("--请选择--");
            $("#twoSelectAllHeadShow").attr("twoClass", "0");
            $("#videoSelectTbody").find("tr[md5]").find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").html("--请选择--");
            $("#videoSelectTbody").find("tr[md5]").find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").attr("twoClass", "0");

            if ($(this).attr("oneClass") == "0") {
                var dom = '<li twoClass="0" class="active">--请选择--</li>';
                $("#twoSelectAllListDown").html(dom);
                $("#videoSelectTbody").find("tr[md5]").find("ul[twoSingleClassListDown='twoSingleClassListDown']").html(dom);
                return;
            }
            videoUploadEntity.videoCategoryEntity.parentId = $(this).attr("oneClass");
            if (videoUploadUI.twoClassfiy[$(this).attr("oneClass")]) {
                var dom = '<li twoClass="0" class="active">--请选择--</li>';
                for (var i = 0; i < videoUploadUI.twoClassfiy[$(this).attr("oneClass")].length; i++) {
                    dom += '<li twoClass="' + videoUploadUI.twoClassfiy[$(this).attr("oneClass")][i].categoryId + '" title="' + videoUploadUI.twoClassfiy[$(this).attr("oneClass")][i].categoryName + '">' + videoUploadUI.twoClassfiy[$(this).attr("oneClass")][i].categoryName + '</li>';
                }
                $("#twoSelectAllListDown").html(dom);
                $("#videoSelectTbody").find("tr[md5]").find("ul[twoSingleClassListDown='twoSingleClassListDown']").html(dom);
            } else {
                videoUploadDAL.getVideoCategory(function (successData) {
                    videoUploadUI.twoClassfiy[videoUploadEntity.videoCategoryEntity.parentId] = successData.list;
                    var dom = '<li twoClass="0" class="active">--请选择--</li>';
                    for (var i = 0; i < successData.list.length; i++) {
                        dom += '<li twoClass="' + successData.list[i].categoryId + '" title="' + successData.list[i].categoryName + '">' + successData.list[i].categoryName + '</li>';
                    }
                    $("#twoSelectAllListDown").html(dom);
                    $("#videoSelectTbody").find("tr[md5]").find("ul[twoSingleClassListDown='twoSingleClassListDown']").html(dom);
                }, function (errorData) { });
            }
        });
        //批量二级分类
        $("#twoSelectAllHead").on("click", function () {
            $("#twoSelectAll").toggleClass("active");
            if ($("#twoSelectAll").hasClass("active")) {
                leDropDownFold.startUsing("twoSelectAll");
            } else {
                leDropDownFold.destroy("twoSelectAll");
            }
        });
        $("#twoSelectAllListDown").on("click", "li", function () {
            $("#twoSelectAll").toggleClass("active");
            leDropDownFold.destroy("twoSelectAll");
            $("#twoSelectAllListDown").find("li").removeClass("active");
            $(this).addClass("active");
            $("#twoSelectAllHeadShow").html($(this).html());
            $("#twoSelectAllHeadShow").attr("twoClass", $(this).attr("twoClass"));

            $("#videoSelectTbody").find("tr[md5]").find("ul[twoSingleClassListDown='twoSingleClassListDown'] li").removeClass("active");
            $("#videoSelectTbody").find("tr[md5]").find("ul[twoSingleClassListDown='twoSingleClassListDown']").find("li[twoClass='" + $(this).attr("twoClass") + "']").addClass("active");

            $("#videoSelectTbody").find("tr[md5]").find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").html($(this).html());
            $("#videoSelectTbody").find("tr[md5]").find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").attr("twoClass", $(this).attr("twoClass"));
        });

        //单个一级分类
        $("#videoSelectTbody").on("click", "tr[md5] div[oneSingleClassHead='oneSingleClassHead']", function () {
            var md5 = $(this).parents("tr").attr("md5");
            $(this).parent().toggleClass("active");
            if ($("#videoSelectTbody tr[md5='" + md5 + "'] div[oneSingleClass='oneSingleClass']").hasClass("active")) {
                leDropDownFold.startUsing("videoSelectTbody tr[md5='" + md5 + "'] div[oneSingleClass='oneSingleClass']");
            } else {
                leDropDownFold.destroy("videoSelectTbody tr[md5='" + md5 + "'] div[oneSingleClass='oneSingleClass']");
            }
        });
        $("#videoSelectTbody").on("click", "tr[md5] ul[oneSingleClassListDown='oneSingleClassListDown'] li", function () {
            var md5 = $(this).parents("tr").attr("md5");
            $(this).parent().parent().toggleClass("active");
            leDropDownFold.destroy("videoSelectTbody tr[md5='" + md5 + "'] div[oneSingleClass='oneSingleClass']");
            $(this).parent().find("li").removeClass("active");
            $(this).addClass("active");
            $(this).parent().parent().find("span[oneSingleClassHeadShow='oneSingleClassHeadShow']").html($(this).html());
            $(this).parent().parent().find("span[oneSingleClassHeadShow='oneSingleClassHeadShow']").attr("oneClass", $(this).attr("oneClass"));
            $(this).parent().parent().parent().find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").html("--请选择--");
            $(this).parent().parent().parent().find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").attr("twoClass", "0");
            if ($(this).attr("oneClass") == "0") {
                var dom = '<li twoClass="0" class="active">--请选择--</li>';
                $(this).parent().parent().parent().find("ul[twoSingleClassListDown='twoSingleClassListDown']").html(dom);
                return;
            }
            videoUploadEntity.videoCategoryEntity.parentId = $(this).attr("oneClass");
            if (videoUploadUI.twoClassfiy[$(this).attr("oneClass")]) {
                var dom = '<li twoClass="0" class="active">--请选择--</li>';
                for (var i = 0; i < videoUploadUI.twoClassfiy[$(this).attr("oneClass")].length; i++) {
                    dom += '<li twoClass="' + videoUploadUI.twoClassfiy[$(this).attr("oneClass")][i].categoryId + '" title="' + videoUploadUI.twoClassfiy[$(this).attr("oneClass")][i].categoryName + '">' + videoUploadUI.twoClassfiy[$(this).attr("oneClass")][i].categoryName + '</li>';
                }
                $(this).parent().parent().parent().find("ul[twoSingleClassListDown='twoSingleClassListDown']").html(dom);
            } else {
                var _this = this;
                videoUploadDAL.getVideoCategory(function (successData) {
                    videoUploadUI.twoClassfiy[videoUploadEntity.videoCategoryEntity.parentId] = successData.list;
                    var dom = '<li twoClass="0" class="active">--请选择--</li>';
                    for (var i = 0; i < successData.list.length; i++) {
                        dom += '<li twoClass="' + successData.list[i].categoryId + '" title="' + successData.list[i].categoryName + '">' + successData.list[i].categoryName + '</li>';
                    }
                    $(_this).parent().parent().parent().find("ul[twoSingleClassListDown='twoSingleClassListDown']").html(dom);
                }, function (errorData) { });
            }
        });
        //单个二级分类
        $("#videoSelectTbody").on("click", "tr[md5] div[twoSingleClassHead='twoSingleClassHead']", function () {
            var md5 = $(this).parents("tr").attr("md5");
            $(this).parent().toggleClass("active");
            if ($("#videoSelectTbody tr[md5='" + md5 + "'] div[twoSingleClass='twoSingleClass']").hasClass("active")) {
                leDropDownFold.startUsing("videoSelectTbody tr[md5='" + md5 + "'] div[twoSingleClass='twoSingleClass']");
            } else {
                leDropDownFold.destroy("videoSelectTbody tr[md5='" + md5 + "'] div[twoSingleClass='twoSingleClass']");
            }
        });
        $("#videoSelectTbody").on("click", "tr[md5] ul[twoSingleClassListDown='twoSingleClassListDown'] li", function () {
            var md5 = $(this).parents("tr").attr("md5");
            $(this).parent().parent().toggleClass("active");
            leDropDownFold.destroy("videoSelectTbody tr[md5='" + md5 + "'] div[twoSingleClass='twoSingleClass']");
            $(this).parent().find("li").removeClass("active");
            $(this).addClass("active");

            $(this).parent().parent().find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").html($(this).html());
            $(this).parent().parent().find("span[twoSingleClassHeadShow='twoSingleClassHeadShow']").attr("twoClass", $(this).attr("twoClass"));
        });
    };
    videoUploadUI.globalDom = "";
    videoUploadUI.oneClassfiy = [];
    videoUploadUI.twoClassfiy = {};
    videoUploadUI.init = (function () {
        $('input').iCheck({
            checkboxClass: 'icheckbox_square-blue',
            radioClass: 'iradio_square-blue',
            increaseArea: '20%',// optional
        });
        //获取配置
        videoUploadUI.uploadConfig.init();
        leFileOperation.init({
            multipleDomElement: [$("#selectSystemFile1")[0], $("#openFileSelectBox")[0]], //一次允许选择多个文件,需要传递页面元素对象
            multipleCallback: function (data) {
                return "";
            }, //如果需要额外加什么参数在这里设置如果不需要则 return "";
            videoUpload_fileList: vaasFileUpload.fileUploadList, //上传列表中现有的文件列表//临时需要传递null
            addFileCallback: function (data) {
                var addFileErrorObj = {
                    "大小为0的文件": 0,
                    "不支持的视频格式": 0,
                    "文件已在上传列表当中": 0,
                    "选择了相同的文件": 0,
                    "视频名称不合法": 0
                };
                for (var i = 0; i < data.errorFiles.length; i++) {
                    if (data.errorFiles[i].errorMsg) {
                        addFileErrorObj[data.errorFiles[i].errorMsg]++;
                    }
                }
                var tipErrorMsg = "";
                if (addFileErrorObj["大小为0的文件"] > 0) {
                    tipErrorMsg += "文件大小不能为0:数量为:" + addFileErrorObj["大小为0的文件"];
                }
                if (addFileErrorObj["不支持的视频格式"] > 0) {
                    tipErrorMsg += "<br/>不支持的视频格式:数量为:" + addFileErrorObj["不支持的视频格式"] + "<br/> <span style='margin-top: 15px;color:#FFB335;display: inline-block;word-break: break-all;text-align: left;width: 80%;'>支持上传的视频格式包括:" + vaasFileUpload.initOptionObject.leFileOperation.fileTypes + "</span>";
                }
                if (addFileErrorObj["文件已在上传列表当中"] > 0) {
                    tipErrorMsg += "<br/>您所选择的视频文件已经存在于上传列表中:数量为:" + addFileErrorObj["文件已在上传列表当中"];
                }
                if (addFileErrorObj["选择了相同的文件"] > 0) {
                    tipErrorMsg += "<br/>当次选择了相同的文件:数量为:" + addFileErrorObj["选择了相同的文件"];
                }
                if (addFileErrorObj["视频名称不合法"] > 0) {
                    tipErrorMsg += "<br/>您所选择文件的视频名称不合法:数量为:" + addFileErrorObj["视频名称不合法"];
                }
                if (tipErrorMsg) {
                    leToolFunction.showAlertTip(tipErrorMsg);
                }
                if (data.successFiles.length > 0) {
                    videoUploadUI.showOrHideSelect("hide");
                }
                for (var i = 0; i < data.successFiles.length; i++) {
                    videoUploadUI.addOneData(data.successFiles[i]);
                }
            }, //本次选择文件的回调函数
            fileTypes: "wmv|wm|avi|dat|asf|rm|rmvb|ram|mpg|mpeg|mp4|mov|m4v|mkv|flv|vob|qt|divx|cpk|fli|flc|mod|dvix|dv|f4v|ts"
        });
        vaasFileUpload.init({
            language: "zh_cn",
            leFileOperation: leFileOperation, // 把 leFileOperation传过来
            uploadInitUrl: adminBase.reuqestUrl.uploadInit + "?", //上传初始化地址
            polingUrl: adminBase.reuqestUrl.heartbeat, // 心跳地址
            uploadStatusCallback: function (data) {

            }
        });
        //批量一级分类
        videoUploadDAL.getVideoCategory(function (successData) {
            videoUploadUI.oneClassfiy = successData.list;
            var dom = '<li oneClass="0" class="active">--请选择--</li>';
            for (var i = 0; i < successData.list.length; i++) {
                dom += '<li oneClass="' + successData.list[i].categoryId + '" title="' + successData.list[i].categoryName + '">' + successData.list[i].categoryName + '</li>';
            }
            $("#oneSelectAllListDown").html(dom);
            videoUploadUI.globalDom = dom;
        }, function (errorData) { });
        videoUploadUI.bindWebPageEvent();
    })();
    return videoUploadUI;
})();






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值