Upload.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. Namespace.register("U.MD.UI"); //Disk上传的命名空间
  2. //#region 上传区域 Html5 Flash html
  3. //整个控件的名字规范函数名字
  4. /**
  5. * 上传带界面的函数
  6. * @param {string} url为服务器地址
  7. * @param {function} 回调函数
  8. * @param {function} 判断hash值回调函数
  9. * 回调函数返回结果:url为服务器地址返回的值。
  10. */
  11. U.MD.UI.upload = function (url, cb, hashcallback) {
  12. //如果有flash,则走flash。
  13. var _str = U.UF.CI.isSupportFlash(); //得到客户端支持html还是flash的处理
  14. //_str = "Flash";
  15. //html5的处理和html的处理,如果html,不能断点续传,不能解析md5.
  16. if (_str == "HTML5") {
  17. U.MD.UI.upload.html5(url, cb, hashcallback);
  18. }
  19. //flash的处理
  20. else if (_str == "Flash") {
  21. U.MD.UI.upload.flash(url, cb, hashcallback);
  22. }
  23. //只能通过input上传的处理
  24. else {
  25. U.MD.UI.upload.input(url, cb, hashcallback);
  26. }
  27. }
  28. //所有的上传框选择的文件处理
  29. U.MD.UI.upload.uploadFileInfo = [];
  30. /**
  31. * 文件上传函数
  32. *@param
  33. * @param {string} url为服务器地址
  34. * @param {function} 回调函数
  35. * @param {function} 判断hash值回调函数
  36. * 回调函数返回结果:url为服务器地址返回的值。
  37. */
  38. U.MD.UI.upload.upfiles = function (r,url, cb, hashcallback) {
  39. U.MD.UI.inputSelect({
  40. //错误处理
  41. error: function (r) {
  42. console.log("上传错误:" + r);
  43. },
  44. //获取hash回调
  45. getHashCallBack: function (filehash, fileinfo, callback) {
  46. //判断获取hash
  47. hashcallback(filehash, fileinfo, function (isupload) {
  48. //判断是否上传的处理
  49. if (isupload) { //如果md5匹配后还是要求上传,那么这里就处理上传
  50. //判断数据库是否有该文件hash值 回调参数(文件服务器名,服务器文件大小)
  51. U.UF.UP.html5Upload.select(fileinfo, filehash, function (fileservername, filesize) {
  52. //上传处理
  53. U.UF.UP.html5Upload.loop(fileinfo, filehash, fileservername, filesize, function (value) {
  54. //上传成功的处理
  55. if (value == true) {
  56. callback.getData(filehash, fileservername, fileinfo); //得到返回值处理
  57. var _nextuploadfile = U.MD.UI.delUploadFile(fileinfo.fileel, fileinfo); //删除上传成功后的文件,得到下一个需要上传的文件
  58. // 如果有下一个文件要上传的处理
  59. if (_nextuploadfile) {
  60. U.MD.UI.inputUpload(_nextuploadfile, callback);
  61. }
  62. }
  63. //上传中的处理
  64. else {
  65. callback.progress(value, fileinfo.fileid, "上传中"); //生成进度条
  66. }
  67. });
  68. });
  69. }
  70. else {
  71. var _nextuploadfile = U.MD.UI.delUploadFile(fileinfo.fileel, fileinfo); //删除上传成功后的文件,得到下一个需要上传的文件
  72. // 如果有下一个文件要上传的处理
  73. if (_nextuploadfile) {
  74. U.MD.UI.inputUpload(_nextuploadfile, callback);
  75. }
  76. }
  77. });
  78. },
  79. //获取进度条
  80. progress: U.MD.UI.progress, //上传文件的进度条处理
  81. //得到服务器返回值的处理
  82. getData: function (filehash, fileservername, file) {
  83. var _type = file.name.substring(file.name.lastIndexOf('.') + 1, file.name.length), //获取文件后缀名
  84. _thumbnailname = 'gif|jpg|jpeg|png'.indexOf(_type.toLowerCase()) > -1 ? (Guid.newGuid() + "." + _type) : null; //判断是否为图片
  85. //如果是图片则创建缩略图
  86. if (_thumbnailname) {
  87. U.A.Request(US.DISK, ['CreateThumbnail', fileservername, _thumbnailname], function (r) { });
  88. }
  89. //添加文件到数据库
  90. U.A.Request(US.CD, [US.DB, 'UseStudio_Disk', 'CreateUploadFile', U.UF.C.queryString("UserId", url), file.fileid, U.UF.C.queryString("DirectoryId", url), file.name, fileservername, _thumbnailname, filehash, file.size, 1, file.name, _type, U.UF.C.queryString("Encrypt", url)],
  91. function (request) {
  92. cb({ data: [fileservername, fileservername, file.fileid, file.size, U.UF.C.queryString("Encrypt", url), U.UF.C.queryString("DirectoryId", url)] }, file);
  93. });
  94. }
  95. });
  96. this.value = "";
  97. }
  98. /**
  99. * HTML5上传
  100. * @param {string} url为服务器地址
  101. * @param {function} 回调函数
  102. * @param {function} 判断hash值回调函数
  103. * 回调函数返回结果:url为服务器地址返回的值。
  104. */
  105. U.MD.UI.upload.html5 = function (url, cb, hashcallback) {
  106. //如果是html5,走html5
  107. U.MD.UI.create(); //创建传出上传框
  108. var _clickuploadel = U.selectEl("#U_MD_UI_UP_DRT")[0]; //获取上传按钮的处理
  109. _clickuploadel.innerText = "";
  110. //创建一个input file
  111. $$("input", { "multiple": "true", "type": "file", "accept": "*/*", "onchange": function (r) {
  112. U.MD.UI.upload.upfiles(r, url, cb, hashcallback);
  113. return false; //防止重复执行
  114. }, "style": { "cssText": "display: block; position: relative; width: 100%; height: 100%; cursor: pointer; border: 0; color: #666; background: #eee; -moz-user-select: -moz-none; -webkit-user-select: none; opacity: 0; filter: alpha(opacity=0); -moz-opacity: 0;" }
  115. }, _clickuploadel);
  116. if ($("#U_MD_UI_UP_C")[0].length != 0) //通过判断页面上是否要待传的文件判断是否为input提交,如果不是则
  117. U.MD.UI.upload.upfiles(event, url, cb, hashcallback);
  118. }
  119. /**
  120. * Flash上传
  121. * @param {string} url为服务器地址
  122. * @param {function} 回调函数
  123. * @param {function} 判断hash值回调函数
  124. * 回调函数返回结果:url为服务器地址返回的值。
  125. */
  126. U.MD.UI.upload.flash = function (url, cb, hashcallback) {
  127. U.MD.UI.create(); //创建传出上传框
  128. var _url = url,
  129. _cb = cb,
  130. _hashcallback = hashcallback,
  131. _clickuploadel = U.selectEl("#U_MD_UI_UP_DRT")[0]; //获取上传按钮的处理
  132. _clickuploadel.innerText = "";
  133. //添加flash按钮
  134. U.UF.UP.addFlashUploadBottom(_clickuploadel, "flashupload", { "width": _clickuploadel.clientWidth, "height": _clickuploadel.offsetHeight }, {
  135. error: U.MD.UI.flashError, //错误处理回调函数
  136. /**
  137. * 选择文件回调函数
  138. * @param {array} filesinfo
  139. */
  140. select: function (filesinfo) {
  141. U.MD.UI.flashSelect(filesinfo, _url, U.UF.C.isFunction(_hashcallback)); //选择文件的处理
  142. },
  143. /**
  144. * 上传文件获取文件流后的处理
  145. * @param {string} 文件的md5值
  146. * @param {string} 需要上传的文件的唯一识别id
  147. */
  148. getHashCallBack: function (md5, fileid) {
  149. var _fileinfo = U.MD.UI.getFileInfoById(fileid)[0];
  150. //判断获取hash
  151. _hashcallback(md5, _fileinfo, function (isupload) {
  152. //判断是否上传的处理
  153. if (isupload) { //如果md5匹配后还是要求上传,那么这里就处理上传
  154. //直接执行文件的上传处理
  155. U.UF.UP.flashUpload($("*flashupload")[0], fileid, _url);
  156. }
  157. else { //否则执行下一个上传的处理
  158. U.MD.UI.flashContinueUpload(fileid, _url, U.UF.C.isFunction(_hashcallback));
  159. }
  160. });
  161. },
  162. progress: U.MD.UI.progress, //上传文件的进度条处理
  163. uploadComplete: U.MD.UI.flashUploadComplete, //单个文件上传成功的回调函数
  164. //单个文件上传成功后,得到服务器的响应值处理,和CP不一样的是这里是得到了返回值,上面的只是文件已经传输到服务器了。
  165. /**
  166. * 上传文件成功返回上传文件值
  167. * @param {object} 获取服务器返回值
  168. * @param {string} 上传文件的唯一识别id
  169. */
  170. getData: function (r, fileid) {
  171. if (U.UF.C.isFunction(_cb)) {
  172. _cb(r, U.MD.UI.getFileInfoById(fileid)[0]);
  173. }
  174. //否则执行下一个上传的处理
  175. U.MD.UI.flashContinueUpload(fileid, _url, U.UF.C.isFunction(_hashcallback));
  176. },
  177. endUpload: U.MD.UI.deleteUploadAllFile //结束上传后释放资源
  178. }, "*");
  179. }
  180. /**
  181. * input上传
  182. * @param {string} url为服务器地址
  183. * @param {function} 回调函数
  184. * @param {function} 判断hash值回调函数
  185. * 回调函数返回结果:url为服务器地址返回的值。
  186. */
  187. U.MD.UI.upload.input = function (url, cb, hashcallback) {
  188. U.MD.UI.create(); //创建传出上传框
  189. var _clickuploadel = U.selectEl("#U_MD_UI_UP_DRT")[0]; //获取上传按钮的处理
  190. _clickuploadel.innerText = "";
  191. //创建一个input file
  192. $$("input", {
  193. "multiple": "true", "type": "file", "accept": "*/*", "onchange": U.MD.UI.inputSelect,
  194. "style": { "cssText": "display: block; position: relative; width: 100%; height: 100%; cursor: pointer; border: 0; color: #666; background: #eee; -moz-user-select: -moz-none; -webkit-user-select: none; opacity: 0; filter: alpha(opacity=0); -moz-opacity: 0;" }
  195. }, _clickuploadel);
  196. }
  197. /**
  198. * 初始化创建上传弹框
  199. */
  200. U.MD.UI.create = function () {
  201. var _flashtop = U.selectEl("#U_MD_UI_UP_O")[0];
  202. if (_flashtop) {
  203. U.UF.F.windowTopCenter(_flashtop); //居中弹出
  204. }
  205. else {
  206. var _uploadel,
  207. _topel,
  208. _titleel,
  209. _bottom,
  210. _switchel;
  211. _uploadel = $$("div", { "id": "U_MD_UI_UP", "className": "U_MD_UI_UP" });
  212. _topel = $$("div", { "className": "U_MD_UI_UP_O" }, _uploadel);
  213. //头部
  214. _titleel = $$("div", { "className": "U_MD_UI_UP_T" }, _topel);
  215. $$("div", { "className": "U_MD_UI_UP_TO", "innerHTML": "普通上传" }, _titleel);
  216. $$("div", { "className": "U_MD_UI_UP_Z", "innerHTML": "提示声明: 严谨上传包括反动、暴力、色情、违法及侵权内容的文件;严格遵守保密法律法规,任何危害用户或犯法的行为,都必须受到法律追究。" }, _topel);
  217. //文件上传区域
  218. $$("div", { "id": "U_MD_UI_UP_C", "className": "U_MD_UI_UP_C" }, _topel);
  219. //底部
  220. _bottom = $$("div", { "className": "U_MD_UI_UP_D" }, _topel);
  221. _switchel = $$("div", { "className": "U_MD_UI_UP_DR" }, _bottom);
  222. $$("div", { "className": "U_MD_UI_UP_DRO", "innerHTML": "点击上传" }, _switchel);
  223. $$("div", { "className": "U_MD_UI_UP_DRO U_MD_UI_UP_DRT", "id": "U_MD_UI_UP_DRT" }, _switchel);
  224. //弹出上传框
  225. return new U.UF.UI.form("<div class='U_MD_F_S_TI'>上传</div>", _uploadel, {
  226. "id": "U_MD_UI_UP_O",
  227. "style": { "width": "700px", "height": "560px" },
  228. "ondrop" :"U.MD.DK.C.Dropload()",
  229. "ondragover":"event.preventDefault()",
  230. }, { isnarrow: false, isenlarge: false }).form;
  231. }
  232. }
  233. /**
  234. * 获取上传文件所在的位置
  235. * @param {string} 上传文件的id
  236. * @return {array} 上传文件的位置及信息
  237. * 0 找到上传文件的信息
  238. * 1 上传文件在一个flashfiles的位置
  239. * 2 上传文件在多个flashfiles中其中一个flashfiles的位置
  240. */
  241. U.MD.UI.getFileInfoById = function (fileid) {
  242. var i, j,
  243. _allfiles = U.MD.UI.upload.uploadFileInfo; //用户需要上传的所有文件
  244. for (i = 0; i < _allfiles.length; i++) {
  245. j = _allfiles[i].objIndexOf({ "fileid": fileid }); //根据fileid在_allfiles[i]数组的查找获取fileid = fileid的上传文件信息
  246. //找到该上传文件
  247. if (j > -1) {
  248. /*
  249. * 0 找到上传文件的信息
  250. * 1 上传文件在一个flashfiles的位置
  251. * 2 上传文件在多个flashfiles中其中一个flashfiles的位置
  252. */
  253. return [_allfiles[i][j], j, i];
  254. }
  255. }
  256. return [null, -1, -1]; //返回未找到的信息
  257. }
  258. //#endregion
  259. //#region html5- input上传
  260. U.MD.UI.inputSelect = function () {
  261. }
  262. //#endregion
  263. //#region html5 input上传处理
  264. /**
  265. * 生成上传的点击框
  266. * @param event 当input内容改变时触发函数
  267. */
  268. U.MD.UI.inputSelect = function (callback) {
  269. //获取input控件
  270. var event = window.event || arguments.callee.caller.arguments[0];
  271. var _fileinfo,
  272. _fileinfos = [],
  273. _files = event.target.files; //所有上传的文件
  274. if (event.target.files==undefined) //为空则不是通过input上传的文件
  275. _files = event.dataTransfer==undefined?undefined:event.dataTransfer.files; //读取拖拽上传的文件
  276. if(_files==undefined)
  277. return false;
  278. //遍历input的文件
  279. for (var i = 0; i < _files.length; i++) {
  280. _fileinfos.push(_files[i]); //加入待上传文件信息
  281. }
  282. U.MD.UI.upload.uploadFileInfo.push(_fileinfos); //添加上传的处理
  283. U.MD.UI.printUploadFiles(_fileinfos); //生成前台UI
  284. U.MD.UI.inputUpload(_fileinfos[0], callback); //调用上传
  285. }
  286. /*
  287. 生成文件信息
  288. * @param {file} file文件
  289. */
  290. //U.MD.UI.inputFileInfo = function (input) {
  291. // var _return = {
  292. // "creationDate": input.lastModifiedDate,
  293. // "creator": null,
  294. // "data": null,
  295. // "modificationData": input.lastModifiedDate,
  296. // "name": input.name,
  297. // "size": input.size,
  298. // "type": U.UF.UP.getFileNameAndExtension(input.name)[1]
  299. // }
  300. // return _return;
  301. //}
  302. /**
  303. * input上传处理的全过程
  304. * @param event 当input内容改变时触发函数
  305. */
  306. U.MD.UI.inputUpload = function (file, callback) {
  307. file.isupload = true; //设置上传状态为true
  308. //进行文件加密 回调参数(进度,完成,文件hash)
  309. U.UF.UP.html5Upload.fileMd5(file, function (progress, finish, filehash) {
  310. //发生错误的处理
  311. if (!progress) {
  312. //错误处理
  313. if (U.UF.C.isFunction(callback.error)) {
  314. callback.error(finish);
  315. }
  316. }
  317. //判断是否解析完成
  318. else if (finish) {
  319. callback.progress({ "Loaded": 1, "Total": 1 }, file.fileid, ""); //生成进度条
  320. //获取hash后的回调处理
  321. if (U.UF.C.isFunction(callback.getHashCallBack)) {
  322. callback.getHashCallBack(filehash, file, callback);
  323. }
  324. }
  325. //未解析完毕进度条处理
  326. else {
  327. if (U.UF.C.isFunction(callback.progress)) {
  328. callback.progress(progress, file.fileid, "解析中"); //生成进度条
  329. }
  330. }
  331. });
  332. }
  333. //#endregion
  334. //#region flash上传处理的过程
  335. /**
  336. * 上传框用户选择完文件的处理
  337. * @param {array} 需要加载上传框的元素
  338. */
  339. U.MD.UI.flashSelect = function (uploadfiles, url, isgethash) {
  340. U.MD.UI.printUploadFiles(uploadfiles, true); //打印上传的内容
  341. U.MD.UI.upload.uploadFileInfo.push(uploadfiles); //添加上传的信息处理
  342. U.MD.UI.flashUpload(uploadfiles[0], url, isgethash); //上传处理
  343. }
  344. /**
  345. * 上传的处理,如果有处理hash的那么就调用hash的回调
  346. * @param {array} 需要加载上传框的元素
  347. */
  348. U.MD.UI.flashUpload = function (uploadfile, url, isgethash) {
  349. var _flashbottom = U.selectEl("*flashupload")[0], //上传按钮
  350. _fileid = uploadfile.fileid //上传文件的唯一识别id
  351. ;
  352. uploadfile.isupload = true; //设置上传状态为true
  353. //如果需要处理获取hash值的处理
  354. if (isgethash) {
  355. //上传前,先得到hash的值,进行判断是否文件已经存在
  356. U.UF.UP.generateFileHash($("*flashupload")[0], _fileid); //获取hash
  357. }
  358. //文件直接上传的处理
  359. else {
  360. //直接执行文件的上传处理
  361. U.UF.UP.flashUpload(_flashbottom, _fileid, url);
  362. }
  363. }
  364. /**
  365. * 文件单个上传完毕
  366. * @param {string} 上传文件的唯一识别id
  367. */
  368. U.MD.UI.flashUploadComplete = function (fileid) {
  369. // U.alert("传输完成,等待返回。");
  370. }
  371. /**
  372. * 所有文件上传完的处理
  373. */
  374. U.UF.UP.deleteUploadAllFile = function () {
  375. }
  376. /**
  377. * 清空上传框处理
  378. */
  379. U.MD.UI.flashEmptyUpload = function (el) {
  380. var _flashbottom = U.selectEl("*flashupload")[0];
  381. if (_flashbottom) {
  382. U.UF.UP.deleteUploadAllFile(_flashbottom); //清理flash上传的资源
  383. }
  384. }
  385. /**
  386. * 获取上传文件所在的位置
  387. * @param {object} 错误消息
  388. * @return {array} 上传文件的位置及信息
  389. * 0 上传文件在一个flashfiles的位置
  390. * 1 上传文件在多个flashfiles中其中一个flashfiles的位置
  391. * 2 找到上传文件的信息
  392. */
  393. U.MD.UI.flashError = function (errorinfo) {
  394. if (errorinfo.message) { //有错误消息
  395. var _meeage = "上传处理失败:" + errorinfo.message; //上传错误信息
  396. if (UE.errorID == 1502) { //当错误编码是1502时候我们弹出用户可理解的错误
  397. _meeage = "文件太大,电脑内存不足";
  398. }
  399. U.alert(_meeage); //弹出错误
  400. U.UF.C.console(errorinfo); //控制台输出错误
  401. }
  402. }
  403. //#endregion
  404. //#region 统一处理
  405. /**
  406. * 打印上传的信息
  407. * @param {array} 上传的文件数组
  408. */
  409. U.MD.UI.printUploadFiles = function (uploadfiles, isflash) {
  410. var _type,
  411. _info,
  412. _uploaddiv,
  413. _panel,
  414. _panel_one,
  415. _progressel,
  416. _uploadcontent = U.selectEl("#U_MD_UI_UP_C"),
  417. _frag = $$("frag");
  418. //循环打印上传的文件信息
  419. for (i = 0; i < uploadfiles.length; i++) {
  420. uploadfiles[i].fileid = Guid.newGuid(); //设置上传文件的id
  421. _type = U.UF.UP.getFileNameAndExtension(uploadfiles[i]["name"])[1]; //获取上传文件的后缀
  422. //创建上传文件的信息
  423. _uploaddiv = $$("div", { "className": "U_MD_UI_UP_CO" }, _frag);
  424. _panel = $$("div", { "className": "U_MD_UI_UP_COO" }, _uploaddiv);
  425. _panel_one = $$("div", { "className": "U_MD_UI_UP_COI U_Img ", "style": { "cssText": "background-position:-12px 1px"} }, _panel);
  426. $$("div", { "className": "U_MD_UI_UP_COION", "innerHTML": _type }, _panel_one);
  427. _panel_one = $$("div", { "className": "U_MD_UI_UP_COT" }, _panel);
  428. $$("div", { "className": "U_MD_UI_UP_COTS U_MD_D_Text_Abbreviation", "innerHTML": uploadfiles[i].name }, _panel_one);
  429. $$("div", { "className": "U_MD_UI_UP_COTX", "innerHTML": "容量大小:" + U.UF.UP.minUnitToMaxUnit(uploadfiles[i]["size"]) }, _panel);
  430. _panel_one = $$("div", { "className": "U_MD_UI_UP_COS U_MD_D_Text_Abbreviation" }, _panel);
  431. $$("div", { "className": "U_MD_UI_UP_COSN", "innerHTML": "准备上传" }, _panel_one);
  432. $$("div", { "className": "U_MD_UI_UP_COSI U_Img" }, _panel_one);
  433. _panel_one = $$("div", { "className": "U_MD_UI_UP_COC U_MD_UI_UP_COX", "title": "等待响应..." }, _panel_one);
  434. $$("img", { "onerror": U.MD.C.imgError, "src": US.DOMAIN + "img/ULG.gif" }, _panel_one);
  435. $$("div", { "className": "U_MD_UI_UP_COX", "titlle": "点击撤销删除上传", "innerHTML": "撤销",
  436. "onclick": function () {
  437. U.MD.UI.delUploadFile(_uploaddiv, uploadfiles[0], isflash); // 移除当前上传元素,排队向下上传处理
  438. }
  439. }, _panel);
  440. _progressel = $$("div", { "className": "U_MD_UI_UP_COU" }, _uploaddiv);
  441. uploadfiles[i].fileel = _uploaddiv; //记录上传元素的框
  442. uploadfiles[i].progressel = _progressel; //进度条元素
  443. }
  444. //添加上传的文件信息在中间上传区域
  445. _uploadcontent.append(_frag);
  446. }
  447. /**
  448. * 移除当前上传元素,排队向下上传处理
  449. * @param {element} 需要移除的元素
  450. * @param {object} 上传文件的信息
  451. */
  452. U.MD.UI.delUploadFile = function (uploadel, uploadfile, isflash) {
  453. var i, j,
  454. _allfiles = U.MD.UI.upload.uploadFileInfo,
  455. _fileinfo = U.MD.UI.getFileInfoById(uploadfile.fileid), //根据文件的id获取在U.MD.UI.FTF["FL"]中的位置及在U.MD.UI.FTF["FL"][i]中的位置
  456. _allfilesnum = _fileinfo[2], //文件在U.MD.UI.FTF["FL"]中的位置
  457. _filesnum = _fileinfo[1]; //文件在U.MD.UI.FTF["FL"][i]中的位置
  458. U.selectEl(uploadel).remove(); //上传成功后删除上传的元素
  459. if (_filesnum != -1) { //实体存在
  460. //移除一个上传文件
  461. _allfiles[_allfilesnum].splice(_filesnum, 1)[0];
  462. //如果在移除的文件是该多个flash上传中的其中一个的最后一个上传,那么直接删除上传数组
  463. if (!_allfiles[_allfilesnum].length) {
  464. _allfiles.splice(_allfilesnum, 1);
  465. }
  466. //flash清楚上传处理
  467. if (isflash) {
  468. U.UF.UP.deleteUploadFile($("*flashupload")[0], _filesnum, _allfilesnum); //flash中删除上传。
  469. }
  470. //html5清除上传处理
  471. else {
  472. U.UF.UP.html5Upload.deleteUploadFile(uploadfile);
  473. }
  474. //判断上传文件的上传状态,如果是正在上传的文件删除,那么需要向下执行上传文件
  475. if (uploadfile.isupload) {
  476. //如果还有文件需要上传
  477. if (_allfiles.length) {
  478. //利用排队的方式执行文件上传
  479. for (i = 0; i < _allfiles.length; i++) { //从所有的上传文件数组里排队
  480. for (j = 0; j < _allfiles[i].length; j++) { //在fileslist中排队筛选
  481. if (!_allfiles[i][j].isupload) { //如果该文件的状态没有在上传中,那么就直接上传
  482. return _allfiles[i][j];
  483. }
  484. }
  485. }
  486. }
  487. else {
  488. //flash清理上传处理
  489. if (isflash) {
  490. U.MD.UI.flashEmptyUpload(); //清空上传框
  491. }
  492. else {
  493. U.UF.UP.html5Upload.deleteUploadAllFile();
  494. }
  495. }
  496. }
  497. }
  498. }
  499. /**
  500. * 上传文件进度条处理
  501. * @param {object} 进度条的值 Loaded 现在的进度 Total 中进度
  502. * @param {object} 上传文件的唯一识别id
  503. * @param {object} 用md5去判断上传的文件是否需要上传
  504. */
  505. U.MD.UI.progress = function (progress, fileid, msg) {
  506. var _fileinfo = U.MD.UI.getFileInfoById(fileid)[0], //根据上传文件唯一识别的id获取上传文件的信息
  507. _progresschilds = U.selectEl($(_fileinfo.fileel).childs(0).childs(0)[3]).Child(), //获取上传文件进度条元素
  508. _progress = Math.floor((progress.Loaded / progress.Total) * 100); //获取进度的百分比
  509. _fileinfo.progressel.style.width = _progress + "%"; //上传的进度样式
  510. _progresschilds[0].innerText = msg; //上传信息提醒,包括准备上传、正在解析、上传中
  511. _progresschilds[1].style.display = "none"; //上传成功后的
  512. _progresschilds[2].style.display = "block"; //loading
  513. }
  514. /**
  515. * 接续上传的处理
  516. * @param {string} 上传文件的唯一识别id
  517. */
  518. U.MD.UI.flashContinueUpload = function (fileid, url, isgethash) {
  519. var _fileinfo = U.MD.UI.getFileInfoById(fileid)[0], //获取上传完的文件
  520. _nextuploadfile = U.MD.UI.delUploadFile(_fileinfo.fileel, _fileinfo, true); //删除上传成功后的文件,得到下一个需要上传的文件
  521. // 如果有下一个文件要上传的处理
  522. if (_nextuploadfile) {
  523. U.MD.UI.flashUpload(_nextuploadfile, url, isgethash); //调用上传,如果有hash的获取这里支持自动获取hash
  524. }
  525. }
  526. //#endregion