最近的项目要用到一个在线报告的下载,于是完成后自己在理一下思路,大体的实现了我要得需求。

话不多说,直接上代码

首先,取到网络文件的链接,进行判段是否需求再次下载还是直接打开

#pragma mark   下载报告

////     第一步

//是否下载还是打开文件

- (void)downloadPDF:(NSString *)downloadUrl{

NSArray *array = [downloadUrl componentsSeparatedByString:@"/"]; //从字符/中分隔成多个元素的数组

NSString *file = [array lastObject];

if ([self isFileExist:file]) {

//获取Documents 下的文件路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *path = [paths objectAtIndex:0];

NSString *pathString = [path stringByAppendingFormat:@"/%@",file];

NSLog(@"path:%@", pathString);

[self loadDocument:pathString];

}else{

//从新下载

[self downloadFile:downloadUrl];

}

}

#pragma mark      第二步    判断沙盒中是否存在此文件

-(BOOL) isFileExist:(NSString *)fileName

{

//获取Documents 下的文件路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *path = [paths objectAtIndex:0];

NSString *filePath = [path stringByAppendingPathComponent:fileName];

NSFileManager *fileManager = [NSFileManager defaultManager];

BOOL result = [fileManager fileExistsAtPath:filePath];

NSLog(@"这个文件已经存在:%@",result?@"是的":@"不存在");

return result;

}

//////////    第三步

//下载PDF

- (void)downloadFile:(NSString *)downLoadUrl{

__weak typeof(self)weakSelf = self;

[self hudTipWillShow:YES];

[DataService downloadTaskWithURL:downLoadUrl completion:^(id result) {

NSLog(@"%@",result);

NSProgress *downloadProgress = result;

if (weakSelf.HUD) {

weakSelf.HUD.progress = downloadProgress.fractionCompleted;

_HUD.labelText = [NSString stringWithFormat:@"%2.f%%",downloadProgress.fractionCompleted*100];

}

} filesPath:^(id filesPath) {

[_rePortDwn setBackgroundImage:[UIImage imageNamed:@"downLoad"] forState:UIControlStateNormal];

//        NSLog(@"%@",filesPath);

NSURL*urlString = filesPath;

NSString *string = [urlString absoluteString];

NSArray *array = [string componentsSeparatedByString:@"/"]; //从字符A中分隔成2个元素的数组

NSString *file = [array lastObject];

NSLog(@"filePathName = :%@",file);

[weakSelf hudTipWillShow:NO];

}];

}

///////       第四步

//已经下载了的文件用webview显示

-(void)loadDocument:(NSString *)documentName

{

UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64, kSCREEN_WIDTH, kSCREEN_HEIGHT)];

[self.view addSubview:webView];

NSURL *url = [NSURL fileURLWithPath:documentName];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[webView loadRequest:request];

}

最后,直接调用第一步的方法就可以了。

这其中没有做断点续传,日后有遇到再更新!

iOS 文件下载和打开的更多相关文章

  1. IOS研究院之打开照相机与本地相册选择图片(六)

    原创文章如需转载请注明:转载自雨松MOMO程序研究院本文链接地址:IOS研究院之打开照相机与本地相册选择图片(六) Hello 大家好 IOS的文章好久都木有更新了,今天更新一篇哈. 这篇文章主要学习 ...

  2. XamarinSQLite教程Xamarin.iOS项目中打开数据库文件

    XamarinSQLite教程Xamarin.iOS项目中打开数据库文件 以下是打开MyDocuments.db数据库的具体操作步骤: (1)将Mac电脑上的MyDocuments.db数据库移动到W ...

  3. iOS微信里打开app,Universal Links

    这两天在弄分享,从第三方应用或者浏览器打开自己app的东西 传统的方式是通过URL Scheme的方式,但是iOS9以后又出了新的更完美的方式Universal Links. 传统的URL Schem ...

  4. iOS 文件下载

    iOS 视频音乐类等应用会用到“文件下载”.文件下载在iOS中的实现如下: 1.小文件下载 @interface ViewController () <NSURLConnectionDataDe ...

  5. Android,iOS,浏览器打开手机QQ与指定用户聊天界面

    在浏览器中可以通过JS代码打开QQ并弹出聊天界面,一般作为客服QQ使用.而在移动端腾讯貌似没有公布提供类似API,但是却可以使用schema模式来启动手机QQ. 以下为具体代码: 浏览器(包括手机浏览 ...

  6. iOS开发中打开本地应用、打开appStore应用、给app评分功能实现

    app开发中,通常会有邀请用户给app打分的功能.而在iOS中,正式应用都是通过appStore 下载的,因此给app 打分也只能在 appStore中.因此,需要从应用跳转到appStore.方法是 ...

  7. IOS研究院之打开照相机与本地相册选择图片

    如下图所示 在本地相册中选择一张图片后,我们将他拷贝至沙盒当中,在客户端中将它的缩略图放在按钮旁边,这个结构其实和新浪微薄中选择图片后的效果一样.最终点击发送将按钮将图片2进制图片上传服务器. 下面我 ...

  8. 利用openURL,在IOS应用中打开另外一个应用

    在IOS中,实现一个应用启动另外一个应用,使用UIApplication的openURL:方法就可实现,这里以test跳到test02为例.(需要先创建这两个工程) 注册自定义URL协议(在test中 ...

  9. 在IOS应用中打开另外一个应用的解决方案

    最近要在IOS中实现一个应用启动另外一个应用的功能,搜了一些资料,使用UIApplication的openURL:的方法就能实现,现在整理和大家分享一下! 注册自定义URL协议 首先被启动的应用需要向 ...

随机推荐

  1. 使用Python以优雅的方式实现根据shp数据对栅格影像进行切割

    目录 前言 涉及到的技术 优雅切割 总结 一.前言        前面一篇文章(使用Python实现子区域数据分类统计)讲述了通过geopandas库实现对子区域数据的分类统计,说白了也就是如何根据一 ...

  2. Windows Form线程同步

    .Net多线程开发中,经常需要启动工作线程Worker thread处理某些事情,而工作线程中又需要更新主线程UI thread的界面状态.我们只能在主线程中操作界面控件,否则.Net会抛出异常. 那 ...

  3. 数据库读写分离Amoeba

    1.理解读写分离的原理 Amoeba(变形虫)项目,该开源框架于2008发布一款Amoeba for mysql软件,该软件致力于mysql的分布式数据库前端代理层,主要的作用是应用服务访问mysql ...

  4. Hibernate框架单向多对一关联映射关系

    建立多对一的单向关联关系    Emp.java            private Integer empNo //员工编号            private String empName / ...

  5. if(){}else 语句的正确写法以及它的嵌套使用

    if(一个返回bool值的条件表达式) { 程序块 } else{} 它的执行过程我们可以通过一个程序来了解 static void Main(string[] args) { ) // 条件1 { ...

  6. 《深入理解Java虚拟机》学习笔记之内存分配

    JVM在执行Java程序的过程中会把它所管理的内存划分若干个不同的数据区域,如下图: 大致可以分为两类:线程私有区域和线程共享区域. 线程私有区域 程序计数器(Program Counter Regi ...

  7. 2017-3-10 SQL server 数据库 T--SQL语句

    创建数据库:create datebase  数据库名     注:数据库名不能为中文,不能数字开头,不能符号开头. 删除数据库:drop datebase 数据库名 创建表:create   tab ...

  8. 从Hash Killer I、II、III论字符串哈希

    首先,Hash Killer I.II.III是BZOJ上面三道很经典的字符串哈希破解题.当时关于II,本人还琢磨了好久,但一直不明白为啥别人AC的代码都才0.3kb左右,直到CYG神犇说可以直接随机 ...

  9. GUID的获取

    全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符. GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx ...

  10. Internal Server Error with LAMP

    文章出自:http://blog.csdn.net/lipei1220/article/details/8186406 我的问题:  500  添加 .htaccess 后刷新网页就出现错误. 原因为 ...