uploadify.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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,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. var app_icon;
  39. function upload_appfile(upfile) {
  40. var fext = upfile.name.split('.').pop();
  41. if(ac=='super'||ac=='sign'){
  42. if ( fext != 'ipa'){
  43. alert('签名只允许上传ipa类型!',function(){
  44. window.location.reload();
  45. });
  46. return false;
  47. }
  48. }
  49. if (fext != 'apk' && fext != 'ipa'){
  50. alert('不允许的文件类型!',function(){
  51. window.location.reload();
  52. });
  53. return false;
  54. }
  55. if (upfile.size > in_size * 1048576) {
  56. alert("上传失败,大小不能超过" + in_size + "MB!",function(){
  57. window.location.reload();
  58. });
  59. return false;
  60. }
  61. if (upfile.size > singlesize) {
  62. alert("单文件大小,超过" + Math.floor((singlesize / 1024 / 1024) * 100) / 100 + "MB,请开通或升级会员。");
  63. return false;
  64. } else {
  65. if (upfile.size > allowsize) {
  66. alert('应用空间容量不足,请开通或升级会员。');
  67. return false;
  68. }
  69. }
  70. if (mandatory == 1 && certification != 1) {
  71. alert('未进行实名认证或认证审核中');
  72. return false;
  73. }
  74. if (ac=="super"&&supersignnum == 1) {
  75. alert('超级签设备数量不足,请先充值!');
  76. return false;
  77. }
  78. if (upfile.size < 1048576) {
  79. var _size = Math.floor(upfile.size / 1024) + "kb";
  80. } else {
  81. var _fixed = upfile.size / 1048576;
  82. var _size = _fixed.toFixed(2) + "MB";
  83. }
  84. if (upfile.name.length > 10) {
  85. var _name = upfile.name.substr(0, 10) + "...";
  86. } else {
  87. var _name = upfile.name;
  88. }
  89. $("#upprocess").show();
  90. $("#upbtn").hide();
  91. $("#speed-uploadify").html(_name + "(" + _size + ')<span id="percentage"></span>');
  92. $(".turbo-upload").show();
  93. var a={};
  94. if(fext =='apk' || fext =='ipa'){
  95. const parser = new AppInfoParser(upfile)
  96. parser.parse().then(n => {
  97. a.icon = n.icon,
  98. a.fileSize = upfile.size,
  99. a.originalName = upfile.name,
  100. 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.version=n.CFBundleShortVersionString,a.versionCode=n.CFBundleVersion,a.packageName=n.CFBundleIdentifier,a.ext="ipa",a.minSdkVersion=n.MinimumOSVersion,a.teamName=n.mobileProvision.TeamName,a.executable=n.CFBundleExecutable,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),
  101. $(".upload-app-icon").find("img").attr("src", a.icon),
  102. app_icon=a.icon;
  103. $("#upload-app-name").text(a.appName),
  104. parse_up(a,upfile)
  105. }).catch(err => {
  106. console.log('解析出错:' + err)
  107. })
  108. }
  109. }
  110. var app_xhr;
  111. var app_ot;
  112. var app_oloaded;
  113. var app_info;
  114. function parse_up(appinfo,upfile){
  115. if(iLocalId && (bundleId != appinfo.packageName || BundleName != appinfo.appName || ext != appinfo.ext)){
  116. alert('不是同一个应用无法更新',function(){
  117. window.location.reload();
  118. });
  119. return false;
  120. }
  121. for (var i = 0; i < BanBundleId.length; i++) {
  122. if (appinfo.packageName.indexOf(BanBundleId[i]) > -1) {
  123. alert('不支持违规的应用',function(){
  124. window.location.reload();
  125. });
  126. return false;
  127. }
  128. }
  129. for (var i = 0; i < KeyWords.length; i++) {
  130. if (appinfo.appName.indexOf(KeyWords[i]) > -1) {
  131. alert('不支持违规的应用',function(){
  132. window.location.reload();
  133. });
  134. return false;
  135. }
  136. }
  137. var fd = new FormData();
  138. fd.append("app", upfile);
  139. fd.append("time", in_time);
  140. fd.append("ac", ac);
  141. app_xhr = new XMLHttpRequest();
  142. app_xhr.open("post", in_path + "upload/upload");
  143. app_xhr.onload = complete_app;
  144. app_xhr.onerror = failed_app;
  145. app_xhr.upload.onprogress = progress_app;
  146. app_xhr.upload.onloadstart = function(evt) {
  147. app_ot = new Date().getTime();
  148. app_oloaded = 0;
  149. app_info =appinfo;
  150. };
  151. app_xhr.send(fd);
  152. }
  153. function progress_app(evt) {
  154. var nt = new Date().getTime();
  155. var pertime = (nt - app_ot) / 1e3;
  156. app_ot = new Date().getTime();
  157. var perload = evt.loaded - app_oloaded;
  158. app_oloaded = evt.loaded;
  159. var speed = perload / pertime;
  160. var units = "b/s";
  161. if (speed / 1024 > 1) {
  162. speed = speed / 1024;
  163. units = "k/s";
  164. }
  165. if (speed / 1024 > 1) {
  166. speed = speed / 1024;
  167. units = "M/s";
  168. }
  169. speed = speed.toFixed(1);
  170. var per = Math.round(evt.loaded / evt.total * 100);
  171. $(".growing").css("width", per + "%");
  172. $("#percentage").text(" - " + per + "% - " + speed + units);
  173. if (per > 99) {
  174. $("#percentage").text(" 正在保存,请稍等...");
  175. }
  176. }
  177. function complete_app(evt) {
  178. var response = evt.target.responseText;
  179. submit_app(eval("(" + response + ")"));
  180. }
  181. function failed_app() {
  182. $("#speed-uploadify").text("上传异常,请重试!");
  183. $(".growing").css("width", "0%");
  184. $(".turbo-upload").hide();
  185. }
  186. function cancle_app() {
  187. app_xhr.abort();
  188. $("#speed-uploadify").fadeOut(1e3,
  189. function() {
  190. $(this).show().text("已取消上传");
  191. $(".growing").css("width", "0%");
  192. $(".turbo-upload").hide();
  193. });
  194. }
  195. //上传成功后提交
  196. function submit_app(response) {
  197. if(response.code ==404){
  198. alert(response.msg,function(){
  199. window.location.reload();
  200. });
  201. }
  202. $(".progress-container").hide();
  203. $(".redirect-tips").show();
  204. data=app_info;
  205. data.tmp=response.tmp;
  206. data.filename=response.filename;
  207. data.ac=ac;
  208. data.icon=app_icon;
  209. //console.log(data);
  210. if(ac=='sign'){
  211. var upload_jk = "upload/sign_upload";
  212. }else{
  213. var upload_jk = "upload/app_upload";
  214. }
  215. $.post(in_path + upload_jk, data,
  216. function(data){
  217. if (data.code == 200) {
  218. if(ac == 'sign'){
  219. alert(data.msg, function () {
  220. window.location.href = "/sign/sign_detail?id=" + data.appid;
  221. });
  222. }else if(ac == 'super'){
  223. window.location.href = "/ssign/publish_success?id=" + data.appid;
  224. }else{
  225. window.location.href = "/app/publish_success?id=" + data.appid;
  226. }
  227. }else {
  228. if (data.msg) {
  229. Modal.determineModal({
  230. iconClass: "icon-modal-error2", // success: icon-modal-success1, error: icon-modal-error2
  231. title: data.msg,
  232. p: '',
  233. align: 'left',
  234. btnText: '确定'
  235. });
  236. }
  237. }
  238. }, "json");
  239. }