U.UP.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. /*
  2. 上传下载处理类
  3. */
  4. Namespace.register("U.UP");
  5. //#region 变量
  6. //#region
  7. U.UP.FTF = {}; //上传使用集合 //上传使用变量集合 每一个上传生成的上传按钮都是以guid的形式记录下来
  8. U.UP.FTF.EL; //当前上传的元素
  9. //U.UP.FTF.FT = {};
  10. /*
  11. U.UP.FTF.WH = 0;
  12. U.UP.FTF.TF = false;
  13. U.UP.FTF.GS = "*";
  14. */
  15. //#endregion
  16. //#region input 上传
  17. /**
  18. * html input上传
  19. *
  20. * @param {array} 所有需要上传的input
  21. * @param {function} 上传成功回调函数
  22. * @param {array} 回调参数
  23. * @param {string} 回调调用地址 允许带参数
  24. ----------http://disk.1473.cn/upload.ashx?aa=aa
  25. * @param {boolean} 是否单独上传
  26. * @param {object} 上传的格式
  27. --------- "multipart/form-data"
  28. */
  29. U.UP.uploading = function (UDE, UCB, UCT, UAC, UTF, UTP) { //生成传输的iframe
  30. if (UDE.length > 0) {
  31. var _UDBD = document.body,
  32. _UFID = Guid.guidNoDash(); //设置随机的name
  33. //已加载一个可处理的iframe 防止页面通过上传刷新页面
  34. U.M.IFO($$("iframe", { "id": _UFID, "name": _UFID, "width": 0, "height": 0, "style": { "display": "none" },
  35. "frameBorder": 0
  36. }, _UDBD), "", [[U.UP.uploadingA, [UDE, UCB, UCT, UAC, UTF, _UFID, UTP]]]); //生成可访问的iframe
  37. }
  38. }
  39. /**
  40. * html input上传
  41. *
  42. * @param {array} 所有需要上传的input
  43. * @param {function} 上传成功回调函数
  44. * @param {array} 回调参数
  45. * @param {string} 回调调用地址 允许带参数
  46. ----------http://disk.1473.cn/upload.ashx?aa=aa
  47. * @param {boolean} 是否单独上传
  48. * @param {object} 上传的格式
  49. --------- "multipart/form-data"
  50. */
  51. U.UP.uploadingA = function (UDE, UCB, UCT, UAC, UTF, UFID, UTP) {
  52. this.contentWindow.name = UFID; //跨域页面必须设置name
  53. UDE = U.Ut.isArray(UDE) ? UDE : Array.prototype.slice.apply(UDE); //上传input集
  54. UAC = UAC + (UAC.indexOf("?") > -1 ? "" : "?") + ((US && US.userInfo && US.userInfo.userid) || US.userInfo.userid ? "&UserId=" + (US.userInfo.userid || US.userInfo.userid) : ""); //上传地址
  55. var i = 0,
  56. _UL = UDE.length, //上传input长度
  57. _UCE = [],
  58. _UCB = UCB,
  59. _UDBD = document.body,
  60. _URE = { "UpObj": UDE, "context": UCT, "value": "" }, //回调参数设置
  61. _UDFD = $$("form", { "action": UAC, "target": UFID, "encoding": UTP ? UTP : "multipart/form-data", //上传的form
  62. "enctype": UTP ? UTP : "multipart/form-data", "method": "post", "name": "loading", "style": { "display": "none" }
  63. }, _UDBD);
  64. //设置是否分段上传
  65. (UTF) && (_UL = 1, _URE["UpObj"] = UDE.splice(0, 1), _UCB = U.M.apply(this, [[UCB, [_URE]], [U.UP.uploading, [UDE, UCB, UCT, UAC, UTF]]])); UDE = _URE["UpObj"];
  66. //添加上传name
  67. for (i; i < _UL; i++) {
  68. UDE[i].name = UDE[i].name || UDE[i].id || Guid.newGuid();
  69. _UCE.push($(UDE[i]).replaceC($$("div"))[0]);
  70. _UDFD.appendChild(UDE[i]);
  71. }
  72. //上传开始
  73. _UDFD.submit();
  74. this.complete = "";
  75. //上传异步处理
  76. U.MD.IframeLoad(this, [[U.UP.uploadingAsynF, [this, _UCB, _URE]]]);
  77. $(_UDFD).remove();
  78. //清空上传至
  79. for (i = 0; i < _UL; i++) {
  80. $(_UCE[i]).replaceC(UDE[i]);
  81. };
  82. //if (document.selection) { UDE[i].select(); document.selection.clear(); } else { UDE[i].outerHTML += ""; UDE[i].value = ""; } //清空内容
  83. }
  84. /**
  85. * 上传结束异步
  86. *
  87. * @param {array} 所有需要上传的input
  88. * @param {function} 上传成功回调函数
  89. * @param {object} 回调参数
  90. ----------[UpObj] 上传按钮元素
  91. ----------[context] 上传参数
  92. ----------[value] 上传返回值
  93. */
  94. U.UP.uploadingAsynF = function (UDOD, UCB, UDE) {
  95. try {
  96. (!browser.msie) && (UDOD.src = "about:blank");
  97. setTimeout(function () {
  98. try { var _UTH = UDOD.contentWindow.document.body.innerHTML; } catch (e) { }
  99. try { _UTH = _UTH || (UDOD.contentWindow.name != UDOD.id ? UDOD.contentWindow.name : _UTH); } catch (e) { }
  100. //上传失败
  101. if (_UTH == null) { U.Alert("服务器处理繁忙,上传失败"); }
  102. //获取值转化成json对象
  103. try { UDE.value = eval("0,(" + _UTH + ")"); }
  104. catch (e) { UDE.value = _UTH; } //返回的值
  105. $(UDOD).remove();
  106. //回调
  107. if (UCB) { UCB(UDE); }
  108. }, 0);
  109. }
  110. catch (e) { }
  111. }
  112. //#endregion
  113. //#region flash上传处理
  114. /**
  115. * 添加Flash上传按钮按钮
  116. *
  117. * @param {array} 所有需要上传的input
  118. * @param {function} 上传成功回调函数
  119. * @param {object} 回调参数
  120. * @return {object} 回调参数
  121. */
  122. U.UP.AddFAN = function (UDOD, UDID, UWH) {
  123. UDID = UDID || Guid.newGuid(); //var _UDTD;
  124. if ($("object", UDOD).length == 0) {//添加Flash按钮
  125. _UDTD = $$("div", { "innerHTML": '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" class="UD_filePrew" width="' + UWH["width"] + '" height="' + UWH["height"] + '" id="' + UDID + '" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"><param name="movie" value="/img/upload.swf" /><param name="menu" value="false" /><param name="wmode" value="Opaque" /><param name="quality" value="high" /><param name="bgcolor" value="ffffff" /><param name="allowScriptAccess" value="always" /><embed src="/img/upload.swf" quality="high" bgcolor="ffffff" width="' + UWH["width"] + '" height="' + UWH["height"] + '" name="' + UDID + '" align="middle" play="true" wmode="transparent" loop="false" quality="high" style="z-index: 0;" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"></embed></object>' });
  126. UDOD.insertBefore(_UDTD.firstChild, UDOD.firstChild);
  127. }
  128. U.UP.FTF[UDID] = {}; //设置初始化
  129. U.UP.FTF.EL = $("*" + UDID, UDOD).addAttrArray({ "width": UWH["width"] ? UWH["width"] : 1,
  130. "height": UWH["height"] ? UWH["height"] : 1, "style": { "display": "block" }
  131. })[0];
  132. U.UP.FTF[UDID]["EL"] = U.UP.FTF.EL;
  133. return U.UP.FTF.EL;
  134. /*
  135. //返回生成的flash上传按钮
  136. return (U.UP.FTF["EL"] = $("*" + UDID, UDOD).addAttrArray({ "width": UWH["width"] ? UWH["width"] : 1,
  137. "height": UWH["height"] ? UWH["height"] : 1, "style": { "display": "block" }
  138. })[0]); //设置Flash大小
  139. */
  140. }
  141. /**
  142. * 添加Flash传值
  143. *
  144. * @param {object} 设置的flash上传插件的长宽
  145. ----------[width] 长
  146. ----------[height] 宽
  147. * @param {function} 上传成功回调函数
  148. * @param {string} 回调参数
  149. * @return {object} 回调参数
  150. */
  151. U.UP.FAFZ = function (UWH, UTE, UDE) {
  152. var _UCE = U.UP.FTF,
  153. _UDOD = _UCE["EL"],
  154. _UDID = _UDOD.id || _UDOD.name; //flash 插件元素
  155. _UCE[_UDID].WH = UWH; //大小
  156. _UCE[_UDID].FT = UTE; //大小
  157. _UCE[_UDID].GS = UDE || "*"; //大小
  158. //设置舞台
  159. if (_UDOD && _UDOD.SetStage) {
  160. if (!U.UP.FOnload()) { //加载flash
  161. return false;
  162. }
  163. return true;
  164. }
  165. return false;
  166. /*
  167. _UCE["WH"] = UWH; //大小
  168. _UCE["FT"] = UTE; //回调函数
  169. _UCE["GS"] = UDE || "*"; //上传类型
  170. */
  171. }
  172. //#region
  173. //Flash上传初始化
  174. U.UP.FOnload = function () {
  175. try {
  176. var _UDE = U.UP.FTF;
  177. _UDE["EL"].SetStage(_UDE["WH"], _UDE["FT"], _UDE["GS"] || "*"); //加载插件初始化
  178. return true;
  179. }
  180. catch (e) {
  181. return false;
  182. }
  183. }
  184. //上传的错误提示
  185. U.UP.FLEX = function (err) {
  186. U.Alert(err);
  187. U.M.Console(err);
  188. }
  189. //添加上传文件 上传文件的显示
  190. U.UP.FLAdd = function (UDE, UL) {
  191. var _UDOD = U.UP.FTF.EL,
  192. _UDID = _UDOD.ID || _UDOD.name;
  193. if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["ADD"]) {
  194. U.UP.FTF[_UDID].FT["ADD"](UDE, UL);
  195. }
  196. }
  197. //上传所有文件完毕
  198. U.UP.FLACP = function (UFL) {
  199. var _UDOD = U.UP.FTF.EL,
  200. _UDID = _UDOD.ID || _UDOD.name;
  201. if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["AFCP"]) {
  202. U.UP.FTF[_UDID].FT["AFCP"](UFL);
  203. }
  204. }
  205. //上传的进度条
  206. U.UP.FLJD = function (UDE, FID) {
  207. var _UDOD = U.UP.FTF.EL,
  208. _UDID = _UDOD.ID || _UDOD.name;
  209. if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["JDT"]) {
  210. U.UP.FTF[_UDID].FT["JDT"](UDE, FID);
  211. }
  212. }
  213. //上传文件成功同时服务端返回了数据
  214. U.UP.FSLCP = function (UDAT, FID) {
  215. var _UDOD = U.UP.FTF.EL,
  216. _UDID = _UDOD.ID || _UDOD.name;
  217. if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["FCP"]) {
  218. U.UP.FTF[_UDID].FT["FCP"](UDAT, FID);
  219. }
  220. }
  221. //上传文件判断是否存在
  222. U.UP.IsFUp = function (UWJL, FID) {
  223. var _UDOD = U.UP.FTF.EL,
  224. _UDID = _UDOD.ID || _UDOD.name;
  225. if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["FUP"]) {
  226. U.UP.FTF[_UDID].FT["FUP"](UWJL, FID);
  227. }
  228. }
  229. //上传单个文件完毕
  230. U.UP.FLCP = function (data) {
  231. U.Alert("等待服务器的响应...");
  232. }
  233. //#endregion
  234. //#endregion
  235. //#region 下载
  236. /**
  237. * 文件下载区域
  238. *
  239. * @param {string} 上传成功回调函数
  240. * @param {number} 上传成功回调函数
  241. * @param {function} 回调参数
  242. */
  243. U.UP.FileDL = function (UFN, USN, UTF) {
  244. var _userid = US.userInfo.userid,
  245. _UIE = _userid ? _userid : U.M.GetCookie("usestudiosso", "userid") || [];
  246. if (_userid || _UIE[0]) { //用户登录处理
  247. (!_userid) && (US.userInfo.userid = _UIE[0]);
  248. U.UP.uploading([$$("input", { "type": "text", "value": UFN, "name": "filename" }), $$("input", { "type": "text", "value": USN, "name": "filepath" })], //调用访问传参接口
  249. null, null, "http://main.1473.cn/USupfile.ashx?iframename=" + (UTF || "UploadFile"), false);
  250. }
  251. else { //未登录用户处理下载
  252. if (window.location.href.indexOf("www.1473.cn")) { //在1473
  253. try { //可以登录
  254. U.U.L.DLTC(3);
  255. }
  256. catch (e) {
  257. U.Alert("请在云端登录");
  258. }
  259. }
  260. else {
  261. U.UI.Confirm("是否跳转到云端进行下载", function () {
  262. window.location.href = "";
  263. })
  264. }
  265. }
  266. }
  267. /**
  268. * 文件指定的格式下载
  269. *
  270. * @param {string} 下载文件的ID
  271. * @param {string} 下载文件的格式
  272. */
  273. U.UP.FileGS = function (UFID, UTP) {
  274. U.UP.uploading([$$("input", { "type": "text", "value": UFID, "name": "id" }),
  275. $$("input", { "type": "text", "value": UTP, "name": "type" })], null, null, "http://main.1473.cn/USupfile.ashx?iframename=DownType", false);
  276. }
  277. //#endregion
  278. //#region 帮助处理
  279. /**
  280. * 传入类型返回类型中文名与类型图片所在坐标
  281. *
  282. * @param {string} 文件类型
  283. */
  284. U.UP.FFT = function (UTF) {
  285. UTF = UTF.toLowerCase();
  286. var i, _UKE,
  287. _UDE = ["folder", "folderencrypt", "png,jpg,bmp,gif", "doc,docx,uw", "xls,xlsx,ue", "ppt,pptx", "txt", "wmv,video", "mp3", "rar,zip"], //具有系统图标的文件类型
  288. _UAE = [["文件夹", "-6px -41px", "-169px -5px"], ["文件夹", "-659px -42px", "-736px -77px"], //文件类型对应
  289. ["图片文件", "-593px -402px", "-61px -5px"], ["Word文档", "-155px -41px", "-511px -198px", "-477px -10px", "-65px -420px"],
  290. ["Excel文档", "-297px -41px", "-584px -198px;", "-325px -10px", "-290px -50px", "-120px -420px"],
  291. ["PPT幻灯片", "-227px -41px", "-548px -198px", "-220px -420px"], ["Txt文本文档", "-84px -41px", "-477px -198px", "-170px -420px"],
  292. ["视频文件", "-503px -41px", "-760px -42px"], ["Mp3音乐文件", "-438px -41px", "-734px -43px", "-15px -420px", "-175px -10px"],
  293. ["Rar压缩文件", "-368px -41px", "-619px -199px", "-270px -420px"]];
  294. //根据类型筛选指定的
  295. for (i = 0; i < _UDE.length; i++) {
  296. if (_UDE[i].split(",").indexOf(UTF) > -1) { _UKE = _UAE[i]; break; }
  297. };
  298. //默认都有系统文件的图标
  299. (!_UKE) && (_UKE = ["系统文件", "-575px -41px", "-478px -230px", "-320px -420px"]);
  300. //位置定位
  301. for (i = 1; i < _UKE.length; i++) {
  302. _UKE[i] = "background-position:" + _UKE[i] + ";"
  303. };
  304. return _UKE;
  305. }
  306. /**
  307. * 设置文件下载
  308. *
  309. * @param {string} 上传成功回调函数
  310. * @param {string} 上传成功回调函数
  311. */
  312. U.UP.Down = function (UN, UCT) {
  313. if ("createElementNS" in document) { //html5 文件另存为
  314. (!UCT) && (UCT = document.documentElement.outerHTML);
  315. var _UDAD,
  316. _UWE = window.URL || window.webkitURL || window,
  317. _UDE = new Blob[UCT];
  318. _UDAD = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
  319. _UDAD.href = _UWE.createObjectURL(_UDE);
  320. _UDAD.download = UN; U.M.IEVENT(_UDAD, "click");
  321. }
  322. else { //IE文件另存为
  323. if (UCT) {
  324. var _UDOD = $$("iframe", { "display": "none" });
  325. U.M.IFO(_UDOD, UCT, function () { _UDOD.contextWindow.document.execCommand("SaveAs"); });
  326. }
  327. else { document.execCommand("SaveAs"); } //当前文档保存
  328. }
  329. }
  330. /**
  331. * 获取上传的名字和类型
  332. *
  333. * @param {string} 文件名+类型
  334. * @return {array}
  335. ----------[0] 文件名
  336. ----------[1] 文件类型
  337. */
  338. U.UP.GetUpName = function (UEHL) {
  339. UEHL = (UEHL.value || UEHL).toLocaleLowerCase();
  340. var _UI = UEHL.lastIndexOf(".");
  341. return [UEHL.substr(UEHL.lastIndexOf('\\') + 1, _UI), UEHL.substr(_UI + 1)]; //文件名
  342. }
  343. /**
  344. * 判断是否为图片类型,UFN为文件名,比如"aaaa.jpg"
  345. *
  346. * @param {string} 文件名
  347. * @param {boolean} 是否为图片
  348. */
  349. U.UP.IsImg = function (UFN) {
  350. var _UTF = false,
  351. _UE = U.UP.GetUpName(UFN)[1].toLowerCase(), //获取文件类型 同时小写
  352. _UIF = "jpg,gif,png,bmp,jpeg,JPG,GIF,BMP,PNG,JPEG"; //获取图片的所有类型
  353. (_UE && _UIF.indexOf(_UE) > -1) && (_UTF = true); //判断是否是图片
  354. return _UTF;
  355. }
  356. /**
  357. * 判断大小
  358. *
  359. * @param {number} 数字1
  360. * @param {number} 数字2
  361. * @param {boolean} 返回数字1是否大于数字2
  362. */
  363. U.UP.IsSizeS = function (UFO, UFT) {
  364. return (UFO > UFT);
  365. }
  366. /**
  367. * 计算文件大小
  368. *
  369. * @param {string} 文件大小
  370. * @param {string} 最大文件类型
  371. */
  372. U.UP.FileSize = function (UIS) {
  373. UIS = UIS || 0;
  374. var _UDW = (UIS + "").replace(U.MS.Num, ""),
  375. _UDE = ["B", "KB", "M", "G", "TB"], //文件大小处理
  376. i = _UDE.indexOf(_UDW);
  377. //筛选到最大单位处理
  378. i = i == -1 ? 0 : i; UIS = parseInt(UIS);
  379. while (UIS > 1024) {
  380. UIS /= 1024; i++;
  381. };
  382. //保留两个小数点
  383. return UIS.toFixed(2) + _UDE[i];
  384. }
  385. /**
  386. * 获取最小单位的大小
  387. *
  388. * @param {string} 上传成功回调函数
  389. */
  390. U.UP.GetSfileS = function (UIS) {
  391. var i = 0, _UDE = ["B", "KB", "M", "G", "TB"], //指定的文件类型
  392. _UDW = (UIS + "").replace(U.MS.Num, ""), //获取类型
  393. _UIE = _UDE.indexOf(_UDW, null, true); //单位位置
  394. return parseFloat(UIS) * Math.pow(1024, _UIE); //获取最大单位
  395. }
  396. //#endregion