chengjie дней назад: 2
Родитель
Сommit
c2f6355a87
1 измененных файлов с 85 добавлено и 102 удалено
  1. 85 102
      pages/main/add.js

+ 85 - 102
pages/main/add.js

@@ -537,11 +537,7 @@ Page({
537 537
 
538 538
               });
539 539
             } else {
540
-              wx.showToast({
541
-                title: '图片上传失败1',
542
-                image: "../images/universalpic_exclamation_white_120x120.png",
543
-                mask: true,
544
-              });
540
+              isSave = true;
545 541
             }
546 542
           });
547 543
         }
@@ -642,122 +638,109 @@ Page({
642 638
   },
643 639
   uploadImageAll: function (arr, callback) {
644 640
     var that = this;
645
-    var b = false;
646
-    var arrSource = [],
647
-      arrResult = [];
641
+    var uploadList = [];
648 642
     for (var i = 0; i < arr.length; i++) {
649 643
       for (var j = 0; j < arr[i].length; j++) {
650 644
         if (arr[i][j].Type == "image" && arr[i][j].Content) {
651
-          arrSource.push(arr[i][j].Content);
652
-          if (arr[i][j].ContentServer.indexOf(app.globalData.uploadImageUrl) >= 0 ||
653
-            arr[i][j].ContentServer.indexOf("baidu.com") >= 0 ||
654
-            arr[i][j].ContentServer.indexOf("bcebos.com") >= 0) {
655
-            var result = {};
656
-            result.Source = arr[i][j].ContentServer;
657
-            result.Target = arr[i][j].ContentServer;
658
-
659
-            arrResult.push(result);
660
-          } else {
661
-            var source = arr[i][j].Content;
662
-            that.uploadFileToServer(source, function (data) {
663
-              if (data) {
664
-                var result = data;
665
-                result.Target = app.globalData.uploadImageUrl + result.Target;
666
-                arrResult.push(result);
667
-              }
668
-            });
669
-          }
645
+          var contentServer = arr[i][j].ContentServer || "";
646
+          if (contentServer.indexOf(app.globalData.uploadImageUrl) < 0 &&
647
+            contentServer.indexOf("baidu.com") < 0 &&
648
+            contentServer.indexOf("bcebos.com") < 0)
649
+            uploadList.push(arr[i][j]);
670 650
         }
671 651
       }
672 652
     }
673 653
 
674
-    //检查是否上传成功
675
-    setTimeout(function () {
676
-      console.log(arrResult.length);
677
-      console.log(arrSource.length);
678
-      if (arrResult.length >= arrSource.length) {
679
-        //console.log("arrResult:" + JSON.stringify(arrResult));
680
-
681
-        var success = true;
682
-
683
-        var ari = 0;
684
-        for (var i = 0; i < arr.length; i++) {
685
-          for (var j = 0; j < arr[i].length; j++) {
686
-            if (arr[i][j].Type == "image" && arr[i][j].Content) {
687
-              var tempUrl = arr[i][j].Content;
688
-              var serverUrl = "";
689
-              for (var k = 0; k < arrResult.length; k++) {
690
-                if (tempUrl.indexOf(arrResult[k].Source) >= 0) {
691
-                  serverUrl = arrResult[k].Target;
692
-                  break;
693
-                }
694
-              }
695
-              console.log("serverUrl:" + serverUrl);
696
-
697
-              arr[i][j].Content = serverUrl;
698
-              arr[i][j].ContentServer = serverUrl;
654
+    if (uploadList.length == 0) {
655
+      callback(true, arr);
656
+      return;
657
+    }
699 658
 
700
-              if (serverUrl == "") {
701
-                success = false;
702
-                break;
703
-              }
704
-            }
705
-          }
706
-        }
707
-        //console.log(JSON.stringify(arr));
708
-        callback(success, arr);
709
-      }
710
-    }, 2000);
711
-  },
712
-  uploadFileToServer: function (file, callback) {
713
-    var url = common.Encrypt("MiaoguoUploadFile2");
659
+    var finishedCount = 0;
660
+    var failedCount = 0;
714 661
     wx.showLoading({
715
-      title: '上传中',
662
+      title: '上传 0/' + uploadList.length,
716 663
       mask: true,
717 664
     });
718
-    wx.uploadFile({
719
-      url: app.globalData.serverUrl + url,
720
-      filePath: file,
721
-      name: 'file',
722
-      success(res) {
723
-        var err = JSON.parse(res.data);
724
-        if (err.errcode == 10000) {
665
+
666
+    for (var k = 0; k < uploadList.length; k++) {
667
+      (function (image) {
668
+        that.uploadFileToServer(image.Content, function (data) {
669
+          if (data && data.Target) {
670
+            var serverUrl = app.globalData.uploadImageUrl + data.Target;
671
+            image.Content = serverUrl;
672
+            image.ContentServer = serverUrl;
673
+          } else {
674
+            failedCount++;
675
+          }
676
+
677
+          finishedCount++;
678
+          if (finishedCount < uploadList.length) {
679
+            wx.showLoading({
680
+              title: '上传 ' + finishedCount + '/' + uploadList.length,
681
+              mask: true,
682
+            });
683
+            return;
684
+          }
685
+
686
+          clearTimeout(timeoutUploadImage);
725 687
           wx.hideLoading();
726
-          callback(err.result);
727
-          // setTimeout(function () {
728
-          //   wx.downloadFile({
729
-          //     url: err.result.Target,
730
-          //     success(res) {
731
-          //       wx.hideLoading();
732
-          //       if (res.statusCode != 200) {
733
-          //         wx.showModal({
734
-          //           title: '上传图片可能失败',
735
-          //           showCancel: false,
736
-          //           confirmText: '知道了',
737
-          //           content: "请点左下角“复查”后编辑上一张题卡重新上传图片。"
738
-          //         });
739
-          //       } else {
740
-          //         console.log("上传成功");
741
-          //       }
742
-          //     }
743
-          //   });
744
-          // }, 5000);
745
-        } else {
688
+          if (failedCount > 0) {
689
+            wx.showModal({
690
+              title: '图片上传失败',
691
+              showCancel: false,
692
+              confirmText: '知道了',
693
+              content: '有' + failedCount + '张图片未上传成功,请检查网络后再次保存。已经上传成功的图片不需要重传。',
694
+            });
695
+          }
696
+          callback(failedCount == 0, arr);
697
+        }, 0, true);
698
+      })(uploadList[k]);
699
+    }
700
+  },
701
+  uploadFileToServer: function (file, callback, retryCount, silentFailure) {
702
+    var that = this;
703
+    var currentRetry = retryCount || 0;
704
+    var url = common.Encrypt("MiaoguoUploadFile2");
705
+
706
+    function retryOrComplete(errorMessage) {
707
+      if (currentRetry < 1) {
708
+        setTimeout(function () {
709
+          that.uploadFileToServer(file, callback, currentRetry + 1, silentFailure);
710
+        }, 600);
711
+      } else {
712
+        if (!silentFailure) {
746 713
           wx.hideLoading();
747 714
           wx.showModal({
748 715
             title: '上传文件失败',
749 716
             showCancel: false,
750
-            content: JSON.stringify(err.errMsg),
717
+            content: errorMessage || '请检查网络后重试',
751 718
           });
752 719
         }
720
+        callback(null);
721
+      }
722
+    }
723
+
724
+    wx.uploadFile({
725
+      url: app.globalData.serverUrl + url,
726
+      filePath: file,
727
+      name: 'file',
728
+      success(res) {
729
+        var result;
730
+        try {
731
+          result = JSON.parse(res.data);
732
+        } catch (error) {
733
+          retryOrComplete('服务器返回数据格式错误');
734
+          return;
735
+        }
736
+
737
+        if (result.errcode == 10000)
738
+          callback(result.result);
739
+        else
740
+          retryOrComplete(result.errMsg || '服务器未能完成上传');
753 741
       },
754
-      fail: function (err) {
755
-        wx.hideLoading();
756
-        wx.showModal({
757
-          title: '上传文件失败',
758
-          showCancel: false,
759
-          content: JSON.stringify(err),
760
-        });
742
+      fail: function (error) {
743
+        retryOrComplete(error.errMsg || '网络连接失败');
761 744
       }
762 745
     });
763 746
   },