web页超过2G以上大视频分片秒传方案
来源:互联网 发布:java redis缓存用法 编辑:程序博客网 时间:2024/05/21 00:20
本文的视频上传方案是基于乐视视频点播做的原理分析
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 0
- web页超过2G以上大视频分片秒传方案
- linux解压超过2G大文件
- Ubuntu解压超过2G大文件
- fopen打开2G以上大文件
- 获取文件大小,尤其是超过2G的大文件
- linux 下超过2G大文件监控
- linux环境下读写超过2G的大文件
- linux c 读写超过2G的大文件解决办法
- win32读取超过2G大文件的解决办法
- 让SQL2000可以使用超过2G以上的物理内存
- 如何让intel fortran支持2G以上大文件
- 用fopen打开2G以上大文件
- aix无法创建2G以上大文件的问题
- mysql怎样导入超过5G以上的sql文件
- oracle使用大文件(超过4G)
- linux下编译程序使其处理超过2G的大文件
- MFC,大文件(超过2G)获取文件大小的bug
- linux下使用stat函数不可以取得超过2G的大文件的解决方法
- js漂浮广告
- php 支持断点续传的文件下载类
- 认识事物过程
- linux 脚本实现程序自动安装
- Android编译系统
- web页超过2G以上大视频分片秒传方案
- MFC ADO 数据库连接
- Bag of words模型
- 洛谷2296 寻找道路
- Ubuntu常用命令大全
- 慢慢学 动态规划
- 挑战数据结构与算法面试题——80题全解析(一)
- linux下tomcat服务的相关命令
- js脚本报错集锦