app.upload.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /**
  2. * 作者:王成
  3. * 创建日期:2022年10月31日
  4. * 操作系统:MAC
  5. * 描述:App更新脚本
  6. */
  7. /**
  8. * App升级
  9. */
  10. function appUpload() {
  11. getConfigInfo(function(appInfo) {
  12. /* 开始联网检查 */
  13. asyncCheckAppVerison(appInfo);
  14. })
  15. }
  16. /**
  17. * 远程检查App版本信息
  18. * @param {JSON} appInfo App信息
  19. */
  20. function asyncCheckAppVerison(appInfo) {
  21. sendAjax({
  22. url: 'appQueryVersion',
  23. waitMessage: '版本检查...',
  24. success: function(resData) {
  25. var resVersionCode = resData[0].versionCode;
  26. if (parseInt(resVersionCode) > parseInt(appInfo.versionCode)) {
  27. /* 需要升级 */
  28. var msg = "检测到新版本:" + resData[0].versionName + ",是否现在更新?";
  29. muiConfirm(msg, '升级', function() {
  30. downloadAppFile(resData[0].appDownloadUrl, resData[0].appName);
  31. });
  32. } else {
  33. var msg = "App版本:" + appInfo.version + "已是最新!";
  34. muiAlert(msg, "提示");
  35. }
  36. },
  37. error: function(err) {
  38. muiAlertError(err);
  39. }
  40. })
  41. }
  42. /* 下载任务 */
  43. var downloadTask = undefined;
  44. var downloadFileName = undefined;
  45. var downloadPath = "_doc/update/";
  46. /**
  47. * 下载需要的Apk文件
  48. * @param {string} fileUrl 文件下载地址
  49. * @param {string} fileName 下载的文件名称
  50. */
  51. function downloadAppFile(fileUrl, fileName) {
  52. downloadFileName = fileName;
  53. /* 检查现在的文件是否存在 */
  54. checkFileExists({
  55. url: downloadPath + downloadFileName + ".apk",
  56. success: function(entry) {
  57. deleteFile({
  58. entry: entry,
  59. success: function() {
  60. beginDownloadFile(fileUrl);
  61. },
  62. error: function() {
  63. muiAlertError("安装包处理异常,请联系管理员!");
  64. }
  65. })
  66. },
  67. error: function(err) {
  68. console.log("文件不存在,直接下载!");
  69. beginDownloadFile(fileUrl);
  70. }
  71. })
  72. }
  73. /**
  74. * 开始下载文件
  75. * @param {string} fileUrl 下载文件的网络路径
  76. */
  77. function beginDownloadFile(fileUrl) {
  78. /* 创建下载任务 */
  79. downloadTask = plus.downloader.createDownload(fileUrl, {
  80. filename: downloadPath,
  81. }, function(d, status) {
  82. if (status == 200) {
  83. /* 下载成功 调用安装 */
  84. installApp(d.filename);
  85. //console.log(d.filename);
  86. } else {
  87. muiAlertError("升级文件下载失败,请联系管理员!");
  88. }
  89. });
  90. /* 挂接事件 */
  91. downloadTask.addEventListener('statechanged', onStateChange, false);
  92. downloadTask.start();
  93. }
  94. /**
  95. * 检测文件是否存在
  96. * @param {JSON} options 配置项
  97. */
  98. function checkFileExists(options) {
  99. mui.plusReady(function() {
  100. plus.io.resolveLocalFileSystemURL(options.url, function(entry) {
  101. if (entry.isFile) {
  102. if (options.success) options.success(entry);
  103. } else {
  104. if (options.error) options.error("非文件");
  105. }
  106. }, function(err) {
  107. if (options.error) options.error(err);
  108. });
  109. });
  110. }
  111. /**
  112. * 删除文件
  113. * @param {JSON} options 配置项
  114. */
  115. function deleteFile(options) {
  116. options.entry.remove(function(entry) {
  117. if (options.success) options.success();
  118. }, function(err) {
  119. if (options.error) options.error(err);
  120. });
  121. }
  122. /**
  123. * 安装应用
  124. * @param {string} filePath apk文件路径
  125. */
  126. function installApp(filePath) {
  127. mui.plusReady(function() {
  128. console.log("安装文件:" + filePath);
  129. plus.runtime.install(filePath, {
  130. force: true, //强制安装
  131. }, function() {
  132. muiAlert("应用更新完成!", "敬告", function() {
  133. plus.runtime.restart();
  134. });
  135. }, function(e) {
  136. muiAlertError("应用更新失败[" + e.code + "]:" + e.message);
  137. });
  138. })
  139. }
  140. /**
  141. * 下载状态监听
  142. * @param {Object} download 下载任务对象
  143. * @param {number} status 状态值
  144. */
  145. function onStateChange(download, status) {
  146. // console.log("当前下载状态 = " + status);
  147. switch (download.state) {
  148. case undefined:
  149. muiShowWaitLoading("准备中...");
  150. break;
  151. case 0:
  152. muiShowWaitLoading("请求下载...");
  153. break;
  154. case 3:
  155. var size = download.downloadedSize;
  156. var total = download.totalSize;
  157. var msg = "[" + downloadFileName + "]文件下载中,进度 " + ((parseFloat(size) / parseFloat(total)) * 100)
  158. .toFixed(
  159. 2) + "%";
  160. muiShowWaitLoading(msg);
  161. break;
  162. case 4:
  163. muiCloseWaitLoading();
  164. break;
  165. }
  166. }