刚迭代个项目小功能,打开本地或下载excel文件。打开本地的比较简单,这里只说下载文件并且打开。
主要步骤:
1.判断沙盒里面是否已经存在了文件,没有就下载,有就打开。
2.下载文件,下载完成后打开。
下载文件比较简单,封装一个下载的方法:
+ (void)downloadExcelFileWithUrlString:(NSString *)urlString filePath:(NSString *)filePath netProgress:(netProgress)netProgress success:(netSuccess)success{
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
// 下载地址
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
//开始请求下载
NSURLSessionDownloadTask * downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
//NSLog(@"下载进度:%f",downloadProgress.fractionCompleted);
netProgress(downloadProgress);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
/* 设定下载到的位置 */
return [NSURL fileURLWithPath:filePath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
//NSLog(@"下载完成");
success(response);
}];
[downloadTask resume];
}
下载完成后,怎么打开文件呢?有三个方法:
1.用webView打开
- (UIWebView *)webView{
if (!_webView) {
_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
_webView.backgroundColor = LightGRAY;
_webView.scalesPageToFit = YES;
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL fileURLWithPath:self.filePath]];
[_webView loadRequest:request];
}
return _webView;
}
2.用系统提供的QLPreveiewController
打开:
从iOS4.0后,苹果推出新的文件预览控件:QLPreveiewController,支持pdf等格式文件的在线阅读功能。首先需要导入系统库文件:#import <QuickLook/QuickLook.h>
,然后实现 QLPreviewControllerDataSource
代理方法。
QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.view.frame = self.view.bounds;
previewController.dataSource = self;
[self addChildViewController:previewController];
[self.view addSubview:previewController.view];
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{
return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{
//需要在线预览的文件的路径
return [NSURL fileURLWithPath:self.filePath];
}
3.第三方打开:
UIDocumentInteractionController
是从iOS 3.2的SDK开始支持的,他是直接继承自NSObject。
UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:self.filePath]];
documentController.delegate = self;
[documentController presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
self.documentController = documentController;
效果如下:
注意:这里documentController的要是用强引用,ARC环境下,避免documentController实例使用完后被释放,类似于用GCD创建定时器。