|  | @@ -37,6 +37,8 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #import "KSNewAlertView.h"
 | 
	
		
			
				|  |  |  #import "KSLogManager.h"
 | 
	
		
			
				|  |  | +#import "KSSourceDownloadAlert.h"
 | 
	
		
			
				|  |  | +#import "KSPlatformDownloadAlert.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |      CHOOSETYPE_XML,
 | 
	
	
		
			
				|  | @@ -72,12 +74,19 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @property (nonatomic, strong) KSUMShareManager *shareManager;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -@property (nonatomic, assign) BOOL isDownloadFile;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @property (nonatomic, strong) KSNewAlertView *wifiAlert;
 | 
	
		
			
				|  |  |  // 是否需要重新加载
 | 
	
		
			
				|  |  |  @property (nonatomic, assign) BOOL needReload;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +@property (nonatomic, assign) BOOL isDownloadFile;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@property (nonatomic, strong) NSDictionary *downloadParm;
 | 
	
		
			
				|  |  | +// 下载文件地址
 | 
	
		
			
				|  |  | +@property (nonatomic, strong) NSURL *downloadFileUrl;
 | 
	
		
			
				|  |  | +//文件预览(写全局变量,否则操作不成功)
 | 
	
		
			
				|  |  | +@property (nonatomic, strong) UIDocumentInteractionController *documentVC;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  @end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @implementation KSBaseWKWebViewController
 | 
	
	
		
			
				|  | @@ -381,6 +390,10 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |              }];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    else if ([[parm ks_stringValueForKey:@"api"] isEqualToString:@"downloadFile"]) {
 | 
	
		
			
				|  |  | +        NSString *url = [[parm ks_dictionaryValueForKey:@"content"] ks_stringValueForKey:@"downloadUrl"];
 | 
	
		
			
				|  |  | +        [self downloadFileWithUrl:url parm:parm];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      // 回调是否刘海屏
 | 
	
		
			
				|  |  |      else if ([[parm ks_stringValueForKey:@"api"] isEqualToString:@"isSpecialShapedScreen"]) {
 | 
	
		
			
				|  |  |          BOOL isShapedScreen = iPhoneXSafeTopMargin > 0 ? YES : NO;
 | 
	
	
		
			
				|  | @@ -712,9 +725,87 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |          [sendParm setValue:content forKey:@"content"];
 | 
	
		
			
				|  |  |          [self postMessage:sendParm];
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (void)downloadFileWithUrl:(NSString *)fileUrl parm:(NSDictionary *)parm {
 | 
	
		
			
				|  |  | +    [LOADING_MANAGER showCustomLoading:@"文件下载中"];
 | 
	
		
			
				|  |  | +    [KSNetworkingManager downloadFileRequestWithFileUrl:fileUrl progress:^(int64_t bytesRead, int64_t totalBytes) {
 | 
	
		
			
				|  |  | +        // 显示进度
 | 
	
		
			
				|  |  | +        NSInteger progress = (NSInteger)(bytesRead*1.0 / totalBytes) * 100;
 | 
	
		
			
				|  |  | +        NSString *tipsString = [NSString stringWithFormat:@"文件下载中\n%zd%%",progress];
 | 
	
		
			
				|  |  | +        dispatch_main_async_safe(^{
 | 
	
		
			
				|  |  | +            [LOADING_MANAGER showCustomLoading:tipsString];
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    } success:^(NSURL * _Nonnull fileUrl) {
 | 
	
		
			
				|  |  | +        [LOADING_MANAGER removeCustomLoading];
 | 
	
		
			
				|  |  | +        // 修改文件名
 | 
	
		
			
				|  |  | +        NSURL *saveUrl = fileUrl;
 | 
	
		
			
				|  |  | +        NSDictionary *content = [parm ks_dictionaryValueForKey:@"content"];
 | 
	
		
			
				|  |  | +        NSString *fileName = [content ks_stringValueForKey:@"fileName"];
 | 
	
		
			
				|  |  | +        if (![NSString isEmptyString:fileName]) { // 重命名
 | 
	
		
			
				|  |  | +            saveUrl = [self renameFile:fileUrl withNewName:fileName];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        [self saveFileWithPath:saveUrl sendParm:parm];
 | 
	
		
			
				|  |  | +    } faliure:^(NSError * _Nonnull error) {
 | 
	
		
			
				|  |  | +        [LOADING_MANAGER removeCustomLoading];
 | 
	
		
			
				|  |  | +        [self downloadCallback:NO withParm:parm];
 | 
	
		
			
				|  |  | +    }];
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (void)downloadCallback:(BOOL)isSuccess withParm:(NSDictionary *)parm {
 | 
	
		
			
				|  |  | +    NSMutableDictionary *sendParm = [NSMutableDictionary dictionaryWithDictionary:parm];
 | 
	
		
			
				|  |  | +    NSMutableDictionary *content = [NSMutableDictionary dictionaryWithDictionary:[parm ks_dictionaryValueForKey:@"content"]];
 | 
	
		
			
				|  |  | +    [content setValue:@(isSuccess) forKey:@"isSuccess"];
 | 
	
		
			
				|  |  | +    [sendParm setValue:content forKey:@"content"];
 | 
	
		
			
				|  |  | +    [self postMessage:sendParm];
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (NSURL *)renameFile:(NSURL *)fileUrl withNewName:(NSString *)fileName {
 | 
	
		
			
				|  |  | +    // 获取文件的路径
 | 
	
		
			
				|  |  | +    NSURL *directoryURL = [fileUrl URLByDeletingLastPathComponent];
 | 
	
		
			
				|  |  | +    // 旧文件名
 | 
	
		
			
				|  |  | +    NSString *oldFileName = [fileUrl lastPathComponent];
 | 
	
		
			
				|  |  | +    NSString *fileExtension = [oldFileName pathExtension];
 | 
	
		
			
				|  |  | +    // 当前时间戳
 | 
	
		
			
				|  |  | +    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] *1000;
 | 
	
		
			
				|  |  | +    // 构建新的文件名
 | 
	
		
			
				|  |  | +    NSString *newFileName = [NSString stringWithFormat:@"%.0f_%@.%@", interval, fileName, fileExtension];
 | 
	
		
			
				|  |  | +    // 构建新文件的完整 URL
 | 
	
		
			
				|  |  | +    NSURL *newURL = [directoryURL URLByAppendingPathComponent:newFileName];
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 使用 NSFileManager 移动文件以重命名
 | 
	
		
			
				|  |  | +    NSFileManager *fileManager = [NSFileManager defaultManager];
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 如果存在newURL 移除
 | 
	
		
			
				|  |  | +    if ([fileManager fileExistsAtPath:[newURL path]]) {
 | 
	
		
			
				|  |  | +        [fileManager removeItemAtURL:newURL error:nil];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | +    NSError *error = nil;
 | 
	
		
			
				|  |  | +    BOOL success = [fileManager moveItemAtURL:fileUrl toURL:newURL error:&error];
 | 
	
		
			
				|  |  | +    if (success) {
 | 
	
		
			
				|  |  | +        return newURL;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else {
 | 
	
		
			
				|  |  | +        return fileUrl;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (void)saveFileWithPath:(NSURL *)fileUrl sendParm:(NSDictionary *)parm {
 | 
	
		
			
				|  |  | +    self.downloadParm = parm;
 | 
	
		
			
				|  |  | +    self.isDownloadFile = YES;
 | 
	
		
			
				|  |  | +    self.downloadFileUrl = fileUrl;
 | 
	
		
			
				|  |  | +    // 保存到文件目录下
 | 
	
		
			
				|  |  | +    KSDocumentViewController *documentPickerVC = [[KSDocumentViewController alloc] initWithURL:fileUrl inMode:UIDocumentPickerModeExportToService];
 | 
	
		
			
				|  |  | +    documentPickerVC.buttonColor = THEMECOLOR;
 | 
	
		
			
				|  |  | +    // 设置代理
 | 
	
		
			
				|  |  | +    documentPickerVC.delegate = self;
 | 
	
		
			
				|  |  | +    // 设置模态弹出方式
 | 
	
		
			
				|  |  | +    documentPickerVC.modalPresentationStyle = UIModalPresentationFormSheet;
 | 
	
		
			
				|  |  | +    [self.navigationController presentViewController:documentPickerVC animated:YES completion:nil];
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  - (void)afterCheckCameraCheckMic:(PREMISSIONTYPE)cameraType parm:(NSDictionary *)sourceParm {
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      [RecordCheckManager checkMicPermissionAvaiableCallback:^(PREMISSIONTYPE type) {
 | 
	
	
		
			
				|  | @@ -842,8 +933,9 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  - (void)saveFileToPhone:(NSURL *)fileUrl {
 | 
	
		
			
				|  |  |      self.isDownloadFile = YES;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithURL:fileUrl inMode:UIDocumentPickerModeExportToService];
 | 
	
		
			
				|  |  | +    self.downloadFileUrl = fileUrl;
 | 
	
		
			
				|  |  | +    KSDocumentViewController *documentPicker = [[KSDocumentViewController alloc] initWithURL:fileUrl inMode:UIDocumentPickerModeExportToService];
 | 
	
		
			
				|  |  | +    documentPicker.buttonColor = THEMECOLOR;
 | 
	
		
			
				|  |  |      documentPicker.delegate = self;
 | 
	
		
			
				|  |  |      documentPicker.modalPresentationStyle = UIModalPresentationFormSheet;
 | 
	
		
			
				|  |  |      [self presentViewController:documentPicker animated:YES completion:nil];
 | 
	
	
		
			
				|  | @@ -878,6 +970,7 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |      self.fileChooseType = fileTyle;
 | 
	
		
			
				|  |  |      NSArray *documentTypes = @[@"public.content", @"public.text", @"public.source-code", @"public.image", @"public.audio", @"public.audiovisual-content", @"com.adobe.pdf", @"com.apple.keynote.key", @"com.microsoft.word.doc", @"com.microsoft.excel.xls", @"com.microsoft.powerpoint.ppt"];
 | 
	
		
			
				|  |  |      KSDocumentViewController *documentPickerViewController = [[KSDocumentViewController alloc] initWithDocumentTypes:documentTypes inMode:UIDocumentPickerModeImport];
 | 
	
		
			
				|  |  | +    documentPickerViewController.buttonColor = THEMECOLOR;
 | 
	
		
			
				|  |  |      documentPickerViewController.delegate = self;
 | 
	
		
			
				|  |  |      documentPickerViewController.modalPresentationStyle = UIModalPresentationFullScreen;
 | 
	
		
			
				|  |  |      [self presentViewController:documentPickerViewController animated:YES completion:nil];
 | 
	
	
		
			
				|  | @@ -1579,78 +1672,51 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |  - (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller {
 | 
	
		
			
				|  |  |      if (self.isDownloadFile) {
 | 
	
		
			
				|  |  |          self.isDownloadFile = NO;
 | 
	
		
			
				|  |  | +        if (self.downloadParm) {
 | 
	
		
			
				|  |  | +            [self downloadCallback:NO withParm:self.downloadParm];
 | 
	
		
			
				|  |  | +            self.downloadParm = nil;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      else {
 | 
	
		
			
				|  |  |          [self fileChooseErrorCallback];
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -- (void)fileChooseErrorCallback {
 | 
	
		
			
				|  |  | -    if (self.chooseFileParm) { // 回调
 | 
	
		
			
				|  |  | -        [self.chooseFileParm setValue:@"" forKey:@"fileUrl"];
 | 
	
		
			
				|  |  | -        [self postMessage:self.chooseFileParm];
 | 
	
		
			
				|  |  | -        self.chooseFileParm = nil;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -- (void)uploadFile:(NSString *)fileName fileUrl:(NSString *)fileUrl {
 | 
	
		
			
				|  |  | -    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 | 
	
		
			
				|  |  | -        [LOADING_MANAGER showHUD];
 | 
	
		
			
				|  |  | -        NSString *suffix = [NSString stringWithFormat:@".%@",[[fileName componentsSeparatedByString:@"."] lastObject]];
 | 
	
		
			
				|  |  | -        NSData *fileData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:fileUrl]];
 | 
	
		
			
				|  |  | -        [UPLOAD_MANAGER configWithfilePath:@"/user/"];
 | 
	
		
			
				|  |  | -        [UPLOAD_MANAGER uploadFile:fileData fileName:@"file" fileSuffix:suffix progress:^(int64_t bytesWritten, int64_t totalBytes) {
 | 
	
		
			
				|  |  | -            int progress = (int)(bytesWritten / totalBytes * 100);
 | 
	
		
			
				|  |  | -            __block NSString *tipsMessage = [NSString stringWithFormat:@"上传中 %d%%",progress];
 | 
	
		
			
				|  |  | -            dispatch_main_async_safe(^{
 | 
	
		
			
				|  |  | -                [LOADING_MANAGER.loadingView setDisplayText:tipsMessage];
 | 
	
		
			
				|  |  | -            });
 | 
	
		
			
				|  |  | -        } successCallback:^(NSMutableArray * _Nonnull fileUrlArray) {
 | 
	
		
			
				|  |  | -            [LOADING_MANAGER removeHUD];
 | 
	
		
			
				|  |  | -            NSString *fileUrl = [fileUrlArray lastObject];
 | 
	
		
			
				|  |  | -            if (self.chooseFileParm) { // 回调
 | 
	
		
			
				|  |  | -                [self.chooseFileParm setValue:fileUrl forKey:@"fileUrl"];
 | 
	
		
			
				|  |  | -                [self postMessage:self.chooseFileParm];
 | 
	
		
			
				|  |  | -                self.chooseFileParm = nil;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        } faliure:^(NSError * _Nullable error, NSString * _Nullable descMessaeg) {
 | 
	
		
			
				|  |  | -            [LOADING_MANAGER removeHUD];
 | 
	
		
			
				|  |  | -            [LOADING_MANAGER MBShowAUTOHidingInWindow:descMessaeg];
 | 
	
		
			
				|  |  | -            [self fileChooseErrorCallback];
 | 
	
		
			
				|  |  | -        }];
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -- (CGFloat)getFileSize:(NSURL *)fileUrl {
 | 
	
		
			
				|  |  | -    NSFileManager *fileManager = [NSFileManager defaultManager];
 | 
	
		
			
				|  |  | -    float filesize = -1.0;
 | 
	
		
			
				|  |  | -    NSString *path = fileUrl.path;
 | 
	
		
			
				|  |  | -    if ([fileManager fileExistsAtPath:path]) {
 | 
	
		
			
				|  |  | -        NSDictionary *fileDic = [fileManager attributesOfItemAtPath:path error:nil];//获取文件的属性
 | 
	
		
			
				|  |  | -        unsigned long long size = [[fileDic objectForKey:NSFileSize] longLongValue];
 | 
	
		
			
				|  |  | -        filesize = 1.0*size/1024/1024;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    return filesize;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#pragma mark - UIDocumentInteractionControllerDelegate
 | 
	
		
			
				|  |  | --(UIViewController*)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController*)controller{
 | 
	
		
			
				|  |  | -    return self;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | --(UIView*)documentInteractionControllerViewForPreview:(UIDocumentInteractionController*)controller {
 | 
	
		
			
				|  |  | -    return self.view;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | --(CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController*)controller {
 | 
	
		
			
				|  |  | -    return self.view.frame;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -#pragma mark - UIDocumentPickerDelegate
 | 
	
		
			
				|  |  |  - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray <NSURL *>*)urls {
 | 
	
		
			
				|  |  |      if (self.isDownloadFile) {
 | 
	
		
			
				|  |  |          self.isDownloadFile = NO;
 | 
	
		
			
				|  |  | -        //保存成功
 | 
	
		
			
				|  |  | -       [LOADING_MANAGER MBShowAUTOHidingInWindow:@"保存成功"];
 | 
	
		
			
				|  |  | +        [self downloadCallback:YES withParm:self.downloadParm];
 | 
	
		
			
				|  |  | +        self.downloadParm = nil;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        NSURL *descUrl = [urls firstObject];
 | 
	
		
			
				|  |  | +        NSString *desc = [descUrl absoluteString];
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        if ([UserDefaultObjectForKey(TENANT_ID) integerValue] > 0) { // 机构
 | 
	
		
			
				|  |  | +            KSSourceDownloadAlert *alertView = [KSSourceDownloadAlert shareInstance];
 | 
	
		
			
				|  |  | +            [alertView configWithDesc:desc];
 | 
	
		
			
				|  |  | +            [alertView actionCallbackCancel:^{
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +            } copyCallback:^{
 | 
	
		
			
				|  |  | +                [self copyAction:desc];
 | 
	
		
			
				|  |  | +            } sure:^{
 | 
	
		
			
				|  |  | +                [self openFileSource:descUrl];
 | 
	
		
			
				|  |  | +            }];
 | 
	
		
			
				|  |  | +            [alertView showAlert];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            KSPlatformDownloadAlert *alertView = [KSPlatformDownloadAlert shareInstance];
 | 
	
		
			
				|  |  | +            [alertView configWithDesc:desc];
 | 
	
		
			
				|  |  | +            [alertView actionCallbackCancel:^{
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +            } copyCallback:^{
 | 
	
		
			
				|  |  | +                [self copyAction:desc];
 | 
	
		
			
				|  |  | +            } sure:^{
 | 
	
		
			
				|  |  | +                [self openFileSource:descUrl];
 | 
	
		
			
				|  |  | +            }];
 | 
	
		
			
				|  |  | +            [alertView showAlert];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      else {
 | 
	
		
			
				|  |  |          NSURL *url =  [urls lastObject];
 | 
	
	
		
			
				|  | @@ -1720,6 +1786,110 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +- (void)openFileSource:(NSURL *)path {
 | 
	
		
			
				|  |  | +    if (self.downloadFileUrl) {
 | 
	
		
			
				|  |  | +        [self displayFileWithUrl:path];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else {
 | 
	
		
			
				|  |  | +        // 开始访问权限
 | 
	
		
			
				|  |  | +        BOOL fileUrlAuthozied = [path startAccessingSecurityScopedResource];
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        if (fileUrlAuthozied) {
 | 
	
		
			
				|  |  | +            // 通过 NSFileCoordinator 来协调读取
 | 
	
		
			
				|  |  | +            NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
 | 
	
		
			
				|  |  | +            NSError *error = nil;
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            [fileCoordinator coordinateReadingItemAtURL:path options:0 error:&error byAccessor:^(NSURL *newURL) {
 | 
	
		
			
				|  |  | +                // 打开文档
 | 
	
		
			
				|  |  | +                [self displayFileWithUrl:newURL];
 | 
	
		
			
				|  |  | +            }];
 | 
	
		
			
				|  |  | +            // 释放权限
 | 
	
		
			
				|  |  | +            [path stopAccessingSecurityScopedResource];
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            [LOADING_MANAGER MBShowAUTOHidingInWindow:@"无法访问文件"];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (void)displayFileWithUrl:(NSURL *)url {
 | 
	
		
			
				|  |  | +    // 打开文档
 | 
	
		
			
				|  |  | +    self.documentVC = [UIDocumentInteractionController interactionControllerWithURL:url];
 | 
	
		
			
				|  |  | +    // 2. 设置代理(如果需要处理特定交互事件)
 | 
	
		
			
				|  |  | +    self.documentVC.delegate = self;
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 3. 显示“打开方式”菜单或文件预览
 | 
	
		
			
				|  |  | +    // 从指定的视图呈现操作菜单
 | 
	
		
			
				|  |  | +    [self.documentVC presentOptionsMenuFromRect:self.view.bounds inView:self.view animated:YES];
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (void)copyAction:(NSString *)desc {
 | 
	
		
			
				|  |  | +    // 复制
 | 
	
		
			
				|  |  | +    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
 | 
	
		
			
				|  |  | +    pasteboard.string = [NSString returnNoNullStringWithString:desc];
 | 
	
		
			
				|  |  | +    [LOADING_MANAGER MBShowAUTOHidingInWindow:@"复制成功"];
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (void)fileChooseErrorCallback {
 | 
	
		
			
				|  |  | +    if (self.chooseFileParm) { // 回调
 | 
	
		
			
				|  |  | +        [self.chooseFileParm setValue:@"" forKey:@"fileUrl"];
 | 
	
		
			
				|  |  | +        [self postMessage:self.chooseFileParm];
 | 
	
		
			
				|  |  | +        self.chooseFileParm = nil;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (void)uploadFile:(NSString *)fileName fileUrl:(NSString *)fileUrl {
 | 
	
		
			
				|  |  | +    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 | 
	
		
			
				|  |  | +        [LOADING_MANAGER showHUD];
 | 
	
		
			
				|  |  | +        NSString *suffix = [NSString stringWithFormat:@".%@",[[fileName componentsSeparatedByString:@"."] lastObject]];
 | 
	
		
			
				|  |  | +        NSData *fileData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:fileUrl]];
 | 
	
		
			
				|  |  | +        [UPLOAD_MANAGER configWithfilePath:@"/user/"];
 | 
	
		
			
				|  |  | +        [UPLOAD_MANAGER uploadFile:fileData fileName:@"file" fileSuffix:suffix progress:^(int64_t bytesWritten, int64_t totalBytes) {
 | 
	
		
			
				|  |  | +            int progress = (int)(bytesWritten / totalBytes * 100);
 | 
	
		
			
				|  |  | +            __block NSString *tipsMessage = [NSString stringWithFormat:@"上传中 %d%%",progress];
 | 
	
		
			
				|  |  | +            dispatch_main_async_safe(^{
 | 
	
		
			
				|  |  | +                [LOADING_MANAGER.loadingView setDisplayText:tipsMessage];
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        } successCallback:^(NSMutableArray * _Nonnull fileUrlArray) {
 | 
	
		
			
				|  |  | +            [LOADING_MANAGER removeHUD];
 | 
	
		
			
				|  |  | +            NSString *fileUrl = [fileUrlArray lastObject];
 | 
	
		
			
				|  |  | +            if (self.chooseFileParm) { // 回调
 | 
	
		
			
				|  |  | +                [self.chooseFileParm setValue:fileUrl forKey:@"fileUrl"];
 | 
	
		
			
				|  |  | +                [self postMessage:self.chooseFileParm];
 | 
	
		
			
				|  |  | +                self.chooseFileParm = nil;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } faliure:^(NSError * _Nullable error, NSString * _Nullable descMessaeg) {
 | 
	
		
			
				|  |  | +            [LOADING_MANAGER removeHUD];
 | 
	
		
			
				|  |  | +            [LOADING_MANAGER MBShowAUTOHidingInWindow:descMessaeg];
 | 
	
		
			
				|  |  | +            [self fileChooseErrorCallback];
 | 
	
		
			
				|  |  | +        }];
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- (CGFloat)getFileSize:(NSURL *)fileUrl {
 | 
	
		
			
				|  |  | +    NSFileManager *fileManager = [NSFileManager defaultManager];
 | 
	
		
			
				|  |  | +    float filesize = -1.0;
 | 
	
		
			
				|  |  | +    NSString *path = fileUrl.path;
 | 
	
		
			
				|  |  | +    if ([fileManager fileExistsAtPath:path]) {
 | 
	
		
			
				|  |  | +        NSDictionary *fileDic = [fileManager attributesOfItemAtPath:path error:nil];//获取文件的属性
 | 
	
		
			
				|  |  | +        unsigned long long size = [[fileDic objectForKey:NSFileSize] longLongValue];
 | 
	
		
			
				|  |  | +        filesize = 1.0*size/1024/1024;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return filesize;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#pragma mark - UIDocumentInteractionControllerDelegate
 | 
	
		
			
				|  |  | +-(UIViewController*)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController*)controller{
 | 
	
		
			
				|  |  | +    return self;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +-(UIView*)documentInteractionControllerViewForPreview:(UIDocumentInteractionController*)controller {
 | 
	
		
			
				|  |  | +    return self.view;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +-(CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController*)controller {
 | 
	
		
			
				|  |  | +    return self.view.frame;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #pragma mark ---- 镜像和投屏检测
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  - (void)captureViewTips:(NSNotification *)notification {
 |