Bladeren bron

1. 上传文件处理

huangxiaodong 1 jaar geleden
bovenliggende
commit
7d8df2bede

+ 1 - 1
创维盒子/双子星云手机/Class/Set/uploadFile/model/uploadFileDataModel.h

@@ -23,7 +23,7 @@ typedef enum{
 @property (nonatomic, copy)  NSString *filename;
 @property (nonatomic, retain) NSData *_Nullable imageData;
 @property (nonatomic, assign)  uploadStateType uploadType;
-
+@property (nonatomic, assign)  NSInteger didUploadBytes;//已经上传的字节数
 @end
 
 NS_ASSUME_NONNULL_END

+ 1 - 1
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileManager/uploadFileManager.h

@@ -31,7 +31,7 @@ NS_ASSUME_NONNULL_BEGIN
 - (void)uploadFileDoneFun;
 
 //修改文件上传的状态
-- (void)changeUploadFileState:(uploadStateType)curUploadStateType complete:(custom_complete_B)complete;
+- (void)changeUploadFileState:(uploadStateType)curUploadStateType withDidUploadBytes:(NSInteger)didUpLoadBytes complete:(custom_complete_B)complete;
 @end
 
 NS_ASSUME_NONNULL_END

+ 3 - 2
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileManager/uploadFileManager.m

@@ -66,7 +66,7 @@ static uploadFileManager * cur_uploadFileShareInstance = nil;
 }
 
 //修改文件上传的状态
-- (void)changeUploadFileState:(uploadStateType)curUploadStateType complete:(custom_complete_B)complete
+- (void)changeUploadFileState:(uploadStateType)curUploadStateType withDidUploadBytes:(NSInteger)didUpLoadBytes  complete:(custom_complete_B)complete
 {
 //    _curUploadFileDataModel.imageData = nil;
 //    _curUploadFileDataModel.uploadType = uploadStateDone;
@@ -98,6 +98,7 @@ static uploadFileManager * cur_uploadFileShareInstance = nil;
     [uploadFileDataModel bg_findAsync:upLoadFile_image_tableName where:where complete:^(NSArray * _Nullable array) {
         for (uploadFileDataModel * curModel in array) {
             curModel.uploadType = curUploadStateType;
+            curModel.didUploadBytes = didUpLoadBytes;
             
             if(curUploadStateType == uploadStateDone){
                 curModel.imageData = [NSData data];
@@ -116,7 +117,7 @@ static uploadFileManager * cur_uploadFileShareInstance = nil;
 
 - (void)uploadFileDoneFun
 {
-    [self changeUploadFileState:uploadStateDone complete:^(BOOL isSuccess) {
+    [self changeUploadFileState:uploadStateDone withDidUploadBytes:[_curUploadFileDataModel.imageData length] complete:^(BOOL isSuccess) {
         [self->_fileModelDataArr removeObject:self->_curUploadFileDataModel];
          
         if(self->_fileModelDataArr.count > 0){

+ 96 - 20
创维盒子/双子星云手机/CloudPlayer/PlayerViewController+otherDelegate.mm

@@ -31,24 +31,14 @@
 {
     uploadFileDataModel *uploadFileDataMod = [notification object];
     HLog(@"%@",uploadFileDataMod);
+    self.curUploadFileDataMod = uploadFileDataMod;
     
     if(![uploadFileDataMod isKindOfClass:[uploadFileDataMod class]]){
         HLog(@"上传的文件类型不对");
         return;
     }
     
-    if(!self.taskUid){
-        self.taskUid = [iTools getTaskUidStr];
-        self.fileName = uploadFileDataMod.filename;
-        self.AllFileData = uploadFileDataMod.imageData;
-        self.indexOfUploadFlie = 0;
-        
-        HLog(@"%@  %@",self.taskUid,self.fileName);
-        self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData];
-    }
-    
-    NSString * commandStr = [RCCommandHelp applyForUploadFileBy:self.taskUid  filePath:self.fileName];
-    [self.commandChannelManager rc_sendData:commandStr];
+    [self ApplyUploadFileFun];
 }
 
 - (void)applyUploadFileServiceResponseFun:(NSDictionary *)dataDict
@@ -64,9 +54,8 @@
                 }
                 
                 if ([status isEqualToString:@"1"]) {
-                    mainBlock(^{
-                       // 申请失败;
-                    });
+                    [self tryAgainApplyUploadFun];
+                    
                 }else if ([status isEqualToString:@"0"]){
                     if ([[data allKeys] containsObject:@"taskUid"]) {
                         NSString *taskUid = data[@"taskUid"];
@@ -75,9 +64,26 @@
                         }
                         
                         if(taskUid &&  [taskUid isEqualToString:self.taskUid]){
-                            [[uploadFileManager shareInstance] changeUploadFileState:uploadStateUploading complete:^(BOOL isSuccess) {
+                            
+                            NSNumber * fileLengthNum = @0;
+                            if ([[data allKeys] containsObject:@"fileLength"])
+                            {
+                                fileLengthNum = data[@"fileLength"];
+                            }
+                            
+                            [[uploadFileManager shareInstance] changeUploadFileState:uploadStateUploading withDidUploadBytes:[fileLengthNum integerValue] complete:^(BOOL isSuccess) {
                                 
                             }];
+                            
+                            self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData withDidUpLoadSize:[fileLengthNum integerValue]];
+                            
+                            if(self.cutFileDataArr.count == 0){
+                                [[uploadFileManager shareInstance] changeUploadFileState:uploadStateFail withDidUploadBytes:[fileLengthNum integerValue] complete:^(BOOL isSuccess) {
+
+                                }];
+                                return;
+                            }
+                            
                             //答复的taskUid 跟申请的一致 开发发送内容
                             [self upLoadFileFun];
                         }
@@ -88,21 +94,83 @@
         }
         else{
             //异常
+            [self tryAgainApplyUploadFun];
         }
     }
     else{
         //异常
+        [self tryAgainApplyUploadFun];
     }
 }
 
 - (void)upLoadFileFunServiceResponseFun:(NSDictionary *)dataDict
 {
+    //{"type":"uploadFileRandomRet","data":{"progress":"9\/10","filePath":"/sdcard/Download/IMG_0036.JPG","status":"0","msg":"success"}}
     
-    if(self.indexOfUploadFlie == self.cutFileDataArr.count -1){
-        HLog(@"111");
+    if([dataDict isKindOfClass:[NSDictionary class]]){
+        if ([[dataDict allKeys] containsObject:@"data"]) {
+            NSDictionary *data = dataDict[@"data"];
+
+            if ([[data allKeys] containsObject:@"status"]) {
+                NSString  *status = [data objectForKey:@"status"];
+                if(![status isKindOfClass:[NSString class]]){
+                    status = [[NSString  alloc] initWithFormat:@"%@",status];
+                }
+                
+                if ([status isEqualToString:@"1"]) {
+                    [self tryAgainApplyUploadFun];
+                }else if ([status isEqualToString:@"0"]){
+                    [self handleUploadingFun];
+                }
+            }
+        }
+        else{
+            //异常
+            [self tryAgainApplyUploadFun];
+        }
+    }
+    else{
+        //异常
+        [self tryAgainApplyUploadFun];
+    }
+    
+}
+
+#pragma mark 申请上传文件
+- (void)ApplyUploadFileFun
+{
+    if(!self.taskUid){
+        self.taskUid = [iTools getTaskUidStr];
+        self.fileName = self.curUploadFileDataMod.filename;
+        self.AllFileData = self.curUploadFileDataMod.imageData;
+        self.indexOfUploadFlie = 0;
+        
+        HLog(@"%@  %@",self.taskUid,self.fileName);
+        //self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData];
     }
     
-    if (self.indexOfUploadFlie < self.cutFileDataArr.count -1) {
+    NSString * commandStr = [RCCommandHelp applyForUploadFileBy:self.taskUid  filePath:self.fileName];
+    [self.commandChannelManager rc_sendData:commandStr];
+}
+
+#pragma mark 遇到异常时 重新上传
+- (void)tryAgainApplyUploadFun
+{
+    self.taskUid = nil;
+    [self ApplyUploadFileFun];
+}
+
+#pragma mark 处理上传过程
+- (void)handleUploadingFun
+{
+    if(self.indexOfUploadFlie < self.cutFileDataArr.count -1) {
+        
+        NSInteger didUploadSize = (self.indexOfUploadFlie+1) * (8*1024);
+        
+        [[uploadFileManager shareInstance] changeUploadFileState:uploadStateUploading withDidUploadBytes:didUploadSize complete:^(BOOL isSuccess) {
+
+        }];
+        
         self.indexOfUploadFlie ++;
         [self upLoadFileFun];
     }
@@ -119,6 +187,7 @@
         [[uploadFileManager shareInstance] uploadFileDoneFun];
     }
 }
+
 //- (int)getBCC:(NSData*)data
 //{
 //    int bcc = 0;
@@ -153,7 +222,7 @@
 
 
 #pragma mark 文件切片
--(NSMutableArray *)fileCutPartsBy:(NSData*)curData{
+-(NSMutableArray *)fileCutPartsBy:(NSData*)curData withDidUpLoadSize:(NSInteger)didLoadSize{
  
     NSData * data = curData;
     
@@ -162,6 +231,13 @@
     NSUInteger subs = 8*1024;//4096;//要切片的大小,我这里设置的是4096字节
     
     NSInteger index = 0;//起始位置
+    
+    if(didLoadSize != 0){
+        if (didLoadSize % subs != 0){
+            //出错了
+            return [NSMutableArray new];
+        }
+    }
 
     NSMutableArray *dataArray =[NSMutableArray new];
     

+ 2 - 1
创维盒子/双子星云手机/CloudPlayer/PlayerViewController.h

@@ -14,6 +14,7 @@
 #import "PlayerControlButTipView.h"
 #import "Const.h"
 #import "playerShowSecretkeyView.h"
+#import "uploadFileDataModel.h"
 
 @protocol PlayerViewControllerDelegate <NSObject>
 
@@ -99,7 +100,7 @@
 @property (nonatomic, strong) NSData * _Nullable AllFileData;
 @property (nonatomic, strong) NSMutableArray * _Nullable cutFileDataArr;
 @property (nonatomic, assign) NSInteger indexOfUploadFlie;
-
+@property (nonatomic, strong) uploadFileDataModel *curUploadFileDataMod;
 /**
  * @brief 云手机类型  VIP星动云手机  SVIP星曜云手机  STAR 唔即云手机
  */