uploadify.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. //选择上传
  2. function upload_app() {
  3. var upfile = $("#upload_app")[0].files[0];
  4. upload_appfile(upfile);
  5. }
  6. //拖拽上传
  7. $(function () {
  8. $(document).on({
  9. dragleave: function (e) {
  10. e.preventDefault();
  11. $("#_drop1").show();
  12. $("#_drop2").text("{ipa,mobileconfig,apk}");
  13. },
  14. drop: function (e) {
  15. e.preventDefault();
  16. },
  17. dragenter: function (e) {
  18. e.preventDefault();
  19. },
  20. dragover: function (e) {
  21. e.preventDefault();
  22. $("#_drop1").hide();
  23. $("#_drop2").text("快松手");
  24. }
  25. });
  26. $("upload-card")[0].addEventListener("drop",
  27. function (e) {
  28. e.preventDefault();
  29. var fileList = e.dataTransfer.files;
  30. if (fileList.length == 0) {
  31. return false;
  32. }
  33. var upfile = fileList[0];
  34. upload_appfile(upfile);
  35. },
  36. false);
  37. });
  38. function upload_appfile(upfile) {
  39. var fext = upfile.name.split('.').pop();
  40. if (fext != 'apk' && fext != 'ipa' && fext != 'mobileconfig') {
  41. alert('不允许的文件类型!', function () {
  42. window.location.reload();
  43. });
  44. return false;
  45. }
  46. if (upfile.size > in_size * 1048576) {
  47. alert("上传失败,大小不能超过" + in_size + "MB!", function () {
  48. window.location.reload();
  49. });
  50. return false;
  51. }
  52. if (upfile.size > singlesize) {
  53. alert("单文件大小,超过" + Math.floor((singlesize / 1024 / 1024) * 100) / 100 + "MB,请开通或升级会员。");
  54. return false;
  55. } else {
  56. if (upfile.size > allowsize) {
  57. alert('应用空间容量不足,请开通或升级会员。');
  58. return false;
  59. }
  60. }
  61. if (mandatory == 1 && certification != 1) {
  62. alert('未进行实名认证或认证审核中');
  63. return false;
  64. }
  65. if (upfile.size < 1048576) {
  66. var _size = Math.floor(upfile.size / 1024) + "kb";
  67. } else {
  68. var _fixed = upfile.size / 1048576;
  69. var _size = _fixed.toFixed(2) + "MB";
  70. }
  71. if (upfile.name.length > 10) {
  72. var _name = upfile.name.substr(0, 10) + "...";
  73. } else {
  74. var _name = upfile.name;
  75. }
  76. $("#upprocess").show();
  77. $("#upbtn").hide();
  78. $("#speed-uploadify").html(_name + "(" + _size + ')<span id="percentage"></span>');
  79. $(".turbo-upload").html('<a class="ng-binding" href="javascript:cancle_app()">取消</a>');
  80. var a = {};
  81. if (fext == 'apk' || fext == 'ipa') {
  82. const parser = new AppInfoParser(upfile)
  83. parser.parse().then(n => {
  84. a.icon = n.icon,
  85. a.fileSize = upfile.size,
  86. a.originalName = upfile.name,
  87. n.package ? (a.appName = "string" == typeof n.application.label ? n.application.label : n.application.label[0], a.version = n.versionName, a.versionCode = n.versionCode, a.packageName = n.package, a.ext = "apk", a.minSdkVersion = n.usesSdk.minSdkVersion) : (a.appName = n.CFBundleDisplayName ? n.CFBundleDisplayName : n.CFBundleName, a.appExename = n.CFBundleExecutable, a.version = n.CFBundleShortVersionString, a.versionCode = n.CFBundleVersion, a.packageName = n.CFBundleIdentifier, a.ext = "ipa", a.minSdkVersion = n.MinimumOSVersion, a.teamName = n.mobileProvision.TeamName, a.udids = "", a.teamId = n.mobileProvision.TeamIdentifier, n.mobileProvision.ProvisionsAllDevices ? a.teamType = 1 : n.mobileProvision.ProvisionedDevices ? (n.mobileProvision.Entitlements["get-task-allow"] ? a.teamType = 2 : a.teamType = 3, a.udids = n.mobileProvision.ProvisionedDevices) : a.teamType = 4),
  88. $(".upload-app-icon").find("img").attr("src", a.icon),
  89. $("#upload-app-name").text(a.appName),
  90. parse_up(a, upfile)
  91. }).catch(err => {
  92. console.log('解析出错:');
  93. console.log(err);
  94. })
  95. } else {
  96. parse_up(a, upfile);
  97. }
  98. }
  99. var app_xhr;
  100. var app_ot;
  101. var app_oloaded;
  102. var app_info;
  103. function parse_up(appinfo, upfile) {
  104. if (iLocalId && (bundleId != appinfo.packageName)) {
  105. alert('不是同一个应用无法更新', function () {
  106. window.location.reload();
  107. });
  108. return false;
  109. }
  110. var fd = new FormData();
  111. fd.append("app", upfile);
  112. fd.append("time", in_time);
  113. app_xhr = new XMLHttpRequest();
  114. app_xhr.open("post", "/upload/index/uplog");
  115. app_xhr.onload = complete_app;
  116. app_xhr.onerror = failed_app;
  117. app_xhr.upload.onprogress = progress_app;
  118. app_xhr.upload.onloadstart = function (evt) {
  119. app_ot = new Date().getTime();
  120. app_oloaded = 0;
  121. app_info = appinfo;
  122. };
  123. app_xhr.send(fd);
  124. }
  125. function progress_app(evt) {
  126. var nt = new Date().getTime();
  127. var pertime = (nt - app_ot) / 1e3;
  128. app_ot = new Date().getTime();
  129. var perload = evt.loaded - app_oloaded;
  130. app_oloaded = evt.loaded;
  131. var speed = perload / pertime;
  132. var units = "b/s";
  133. if (speed / 1024 > 1) {
  134. speed = speed / 1024;
  135. units = "k/s";
  136. }
  137. if (speed / 1024 > 1) {
  138. speed = speed / 1024;
  139. units = "M/s";
  140. }
  141. speed = speed.toFixed(1);
  142. var per = Math.round(evt.loaded / evt.total * 100);
  143. $(".growing").css("width", per + "%");
  144. $("#percentage").text(" - " + per + "% - " + speed + units);
  145. if (per > 99) {
  146. $("#percentage").text(" 正在保存,请稍等...");
  147. }
  148. }
  149. function complete_app(evt) {
  150. var response = evt.target.responseText;
  151. if (response == -1) {
  152. $("#speed-uploadify").text("文件不规范,请重新选择!");
  153. $(".growing").css("width", "0%");
  154. $(".turbo-upload").hide();
  155. } else {
  156. submit_app(eval("(" + response + ")"));
  157. }
  158. }
  159. function failed_app() {
  160. $("#speed-uploadify").text("上传异常,请重试!");
  161. $(".growing").css("width", "0%");
  162. $(".turbo-upload").hide();
  163. }
  164. function cancle_app() {
  165. app_xhr.abort();
  166. $("#speed-uploadify").fadeOut(1e3,
  167. function () {
  168. $(this).show().text("已取消上传");
  169. $(".growing").css("width", "0%");
  170. $(".turbo-upload").hide();
  171. });
  172. }
  173. //上传成功后提交
  174. function submit_app(response) {
  175. $(".progress-container").hide();
  176. $(".redirect-tips").show();
  177. data = app_info;
  178. data.time = response.time;
  179. data.filename = response.filename;
  180. data.id = in_id;
  181. data.super = $('#upload_app').attr('data-super');
  182. $.post("/upload/index/" + response.extension,
  183. data,
  184. function (ret) {
  185. if (ret.code == -1) {
  186. alert("请先登录后再操作!");
  187. } else if (ret.code == -2 || ret.code == -5) {
  188. alert("Access denied");
  189. } else if (ret.code == -3) {
  190. alert("未进行实名认证或认证审核中!");
  191. } else if (ret.code == -4) {
  192. alert("应用容量不足!请升级VIP!", function () {
  193. window.location.href = "/index/item_price?type=1";
  194. });
  195. } else if (ret.code == -6) {
  196. alert('不是同一个应用无法更新', function () {
  197. window.location.reload();
  198. });
  199. } else if (ret.code == 1) {
  200. window.location.href = "/index/publish_success?id=" + ret.data.id;
  201. }
  202. }, 'json')
  203. }