Browse Source

1.保存文件 如果文件是保存中 检测文件是否存在

huangxiaodong 1 year ago
parent
commit
636a543182

+ 2 - 1
创维盒子/双子星云手机/Class/Set/uploadFile/receiveView/boxReceiveFileRecordCell.m

@@ -248,7 +248,8 @@
         _fileStatelabel.text = [[NSString alloc] initWithFormat:@"%@    %@",str1,str2];
         _fileStatelabel.text = [[NSString alloc] initWithFormat:@"%@    %@",str1,str2];
     }
     }
     else if(curShareFileDataModel.saveboxStateType == saveBoxStateFail){
     else if(curShareFileDataModel.saveboxStateType == saveBoxStateFail){
-        _fileStatelabel.text = NSLocalizedString(@"box_receive_Record_fail",nil);
+        //_fileStatelabel.text = NSLocalizedString(@"box_receive_Record_fail",nil);
+        _fileStatelabel.text = NSLocalizedString(@"File_download_error_404",nil);
         _fileStatelabel.textColor = [UIColor hwColor:@"#DD4E4E" alpha:1.0];
         _fileStatelabel.textColor = [UIColor hwColor:@"#DD4E4E" alpha:1.0];
     }
     }
     
     

+ 30 - 4
创维盒子/双子星云手机/Class/Set/uploadFile/receiveView/receiveView.m

@@ -280,14 +280,40 @@
 - (void)checkBoxSaveFileUrlStateBy:(ShareFileDataModel*)dataModel{
 - (void)checkBoxSaveFileUrlStateBy:(ShareFileDataModel*)dataModel{
     
     
     KWeakSelf
     KWeakSelf
-   [[netWorkManager shareInstance] cloudPhoneGETCallBackCode:dataModel.fileUrl  success:^(id  _Nonnull responseObject) {
+   [[netWorkManager shareInstance] cloudPhoneCheckUrlCallBackCode:dataModel.fileUrl  success:^(id  _Nonnull responseObject) {
        
        
-       SuperModel *model = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
-       if(model && model.status == 0){
-           
+       SuperModel *model = responseObject;
+       if(model){
+           if( model.status == -1){
+               [weakSelf updataBoxSaveDataByFail:dataModel];
+           }
        }
        }
+       
+       
    } failure:^(NSError * _Nonnull error) {
    } failure:^(NSError * _Nonnull error) {
        HLog(@"%@",error);
        HLog(@"%@",error);
    }];
    }];
 }
 }
+
+#pragma mark 更新本地数据
+- (void)updataBoxSaveDataByFail:(ShareFileDataModel*)updataModel
+{
+    for (ShareFileDataModel* model in _saveRecordTableView.boxSaveingArr)
+    {
+        if ([updataModel.fileUrl isEqualToString:model.fileUrl]) {
+            
+            //失败
+            model.saveboxStateType = saveBoxStateFail;
+            [[boxSaveFileManager shareInstance] updataBoxSaveDataByFail:model];
+            
+            [_saveRecordTableView.boxSavefailArr addObject:model];
+            [_saveRecordTableView.boxSaveingArr removeObject:model];
+            break;
+        }
+    }
+    
+    
+    [_saveRecordTableView RefreshAllDataFun];
+}
+
 @end
 @end

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

@@ -29,6 +29,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 
 #pragma mark 更新本地数据库记录
 #pragma mark 更新本地数据库记录
 - (void)updataBoxSaveDataBy:(downStatusModel*)downStatusMod;
 - (void)updataBoxSaveDataBy:(downStatusModel*)downStatusMod;
+#pragma mark 更新本地数据库记录
+- (void)updataBoxSaveDataByFail:(ShareFileDataModel*)dataModel;
 @end
 @end
 
 
 NS_ASSUME_NONNULL_END
 NS_ASSUME_NONNULL_END

+ 34 - 0
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileManager/boxSaveFileManager.m

@@ -223,4 +223,38 @@ static boxSaveFileManager * cur_boxSaveFileShareInstance = nil;
     
     
 }
 }
 
 
+#pragma mark 更新本地数据库记录
+- (void)updataBoxSaveDataByFail:(ShareFileDataModel*)updataModel
+{
+    //1.修改数据库
+    NSMutableArray *firstArr = [NSMutableArray arrayWithArray:_databaseArr[0]];
+    NSMutableArray *needUpdatArr = [NSMutableArray new];
+    
+    for (ShareFileDataModel* model in firstArr) {
+        //HLog(@"%@\n%@",updataModel.url,model.fileUrl);
+        
+        //去掉空格判断
+        model.fileUrl = [model.fileUrl stringByReplacingOccurrencesOfString:@" " withString:@""];
+        if ([updataModel.fileUrl isEqualToString:model.fileUrl]) {
+            [self handleDatabaseArrByDelete:model];
+            
+            //失败
+            model.saveboxStateType = saveBoxStateFail;
+            [needUpdatArr addObject:model];
+            
+            NSMutableArray *failArr = _databaseArr[2];
+            [failArr addObject:model];
+            break;
+        }
+    }
+
+    if(needUpdatArr.count > 0){
+        [ShareFileDataModel bg_saveOrUpdateArrayAsync:needUpdatArr complete:^(BOOL isSuccess) {
+            if (isSuccess) {
+                
+            }
+        }];
+    }
+    
+}
 @end
 @end

+ 5 - 0
创维盒子/双子星云手机/Helpers/iTools.h

@@ -178,6 +178,11 @@ NS_ASSUME_NONNULL_BEGIN
 + (BOOL)isVideoFilewithName:(NSString*)nameStr;
 + (BOOL)isVideoFilewithName:(NSString*)nameStr;
 //判断是否为相片文件
 //判断是否为相片文件
 + (BOOL)isPhotoFilewithName:(NSString*)nameStr;
 + (BOOL)isPhotoFilewithName:(NSString*)nameStr;
+
+// base64 url 编码
++ (NSString *)base64UrlEncoder:(NSString *)str;
+// base64 url 解码
++ (NSString *)base64UrlDecoder:(NSString *)str;
 @end
 @end
 
 
 NS_ASSUME_NONNULL_END
 NS_ASSUME_NONNULL_END

+ 23 - 0
创维盒子/双子星云手机/Helpers/iTools.m

@@ -1273,4 +1273,27 @@ static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq
     return NO;
     return NO;
 }
 }
 
 
+// base64 url 编码
++ (NSString *)base64UrlEncoder:(NSString *)str {
+    NSData *data = [[str dataUsingEncoding:NSUTF8StringEncoding] base64EncodedDataWithOptions:0];
+    NSMutableString *base64Str = [[NSMutableString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
+    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
+    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"=" withString:@""];
+    return base64Str;
+}
+
+// base64 url 解码
++ (NSString *)base64UrlDecoder:(NSString *)str {
+    NSMutableString *base64Str = [[NSMutableString alloc] initWithString:str];
+    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"-" withString:@"+"];
+    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"_" withString:@"/"];
+    NSInteger mod4 = base64Str.length % 4;
+    if (mod4) {
+        [base64Str appendString:[@"====" substringToIndex:(4 - mod4)]];
+    }
+    NSData *data = [[NSData alloc] initWithBase64EncodedString:base64Str options:0];
+    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+}
+
 @end
 @end

+ 2 - 0
创维盒子/双子星云手机/netWork/netWorkManager.h

@@ -39,6 +39,8 @@ typedef void (^netWork_Faild) (NSError *error);
 #pragma mark  afnetwork  get 请求
 #pragma mark  afnetwork  get 请求
 - (void)cloudPhoneGETCallBackCode:(NSString*)code  Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure;
 - (void)cloudPhoneGETCallBackCode:(NSString*)code  Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure;
 
 
+#pragma mark  afnetwork  get 请求 检测文件是否存在
+- (void)cloudPhoneCheckUrlCallBackCode:(NSString*)code  success:(netWork_Success)success failure:(netWork_Faild)failure;
 @end
 @end
 
 
 NS_ASSUME_NONNULL_END
 NS_ASSUME_NONNULL_END

+ 83 - 2
创维盒子/双子星云手机/netWork/netWorkManager.m

@@ -354,7 +354,7 @@ static netWorkManager *Game_NetWorkShareInstance = nil;
         return;
         return;
     }
     }
     
     
-    NSString *url = [NSString stringWithFormat:@"%@/%@",curServer,code];
+    NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
     HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
     HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
     
     
     [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
     [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
@@ -437,7 +437,7 @@ static netWorkManager *Game_NetWorkShareInstance = nil;
         return;
         return;
     }
     }
     
     
-    NSString *url = [NSString stringWithFormat:@"%@/%@",curServer,code];
+    NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
     HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
     HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
     
     
     //managerNAS manager
     //managerNAS manager
@@ -466,4 +466,85 @@ static netWorkManager *Game_NetWorkShareInstance = nil;
         HLog(@"%@", error);
         HLog(@"%@", error);
     }];
     }];
 }
 }
+
+#pragma mark  afnetwork  get 请求 检测文件是否存在
+- (void)cloudPhoneCheckUrlCallBackCode:(NSString*)code  success:(netWork_Success)success failure:(netWork_Faild)failure
+{
+    
+    NSString *curServer = code;
+    NSString *url = [NSString stringWithFormat:@"%@",curServer];
+    HLog(@"地址:%@",url);
+    
+    //managerNAS manager
+    //[managerNAS.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
+    
+    if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
+    {// 无网络状态
+        NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
+        mainBlock(^{
+            success(responseObject);
+        });
+        return;
+    }
+    
+    NSString *fullUrl = nil;
+    NSString *paraStr = nil;
+    NSArray *urlArr = [url componentsSeparatedByString:@"?"];
+    if(urlArr.count == 2){
+        fullUrl = urlArr.firstObject;
+        paraStr = urlArr.lastObject;
+        paraStr = [paraStr stringByReplacingOccurrencesOfString:@"path=" withString:@""];
+        
+        NSString *string = paraStr;
+        NSString *filePathBase64 = [iTools base64UrlEncoder:string];
+        fullUrl = [[NSString alloc] initWithFormat:@"%@/%@",fullUrl,filePathBase64];
+    }else{
+        return;
+    }
+    
+    if(!fullUrl){
+        return;
+    }
+    
+    if([fullUrl containsString:@"getFile"]
+       &&![fullUrl containsString:@"getFiles"]){
+        fullUrl = [fullUrl stringByReplacingOccurrencesOfString:@"getFile" withString:@"getFiles"];
+    }
+    HLog(@"%@",fullUrl);
+    
+    //1.创建管理者对象
+   AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
+   //2.确定请求的URL地址
+   NSURL *url2222 = [NSURL URLWithString:fullUrl];
+   //3.创建请求对象
+   NSURLRequest *request = [NSURLRequest requestWithURL:url2222];
+   //4.下载任务
+    
+   __block  SuperModel *model = [SuperModel new];
+   __block  NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
+       //打印下下载进度
+       HLog(@"%@",downloadProgress);
+       [task cancel];
+       
+   } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
+       //设置文件保存路径
+       return [NSURL fileURLWithPath:@""];
+   } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
+       //HLog(@"完成cache:%@",filePath);
+       NSHTTPURLResponse *response1 = (NSHTTPURLResponse *)response;
+       NSInteger statusCode = [response1 statusCode];
+       HLog(@"statusCode:%ld",statusCode);
+       if (statusCode == 200) {
+           model.code = 0;
+           success(model);
+       }else{
+           model.code = -1;
+           success(model);
+       }
+   }];
+   //5.开始启动下载任务
+   [task resume];
+   //[task cancel];
+    
+}
 @end
 @end