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

话不多说,直接上代码

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

#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. xcode8 更新cocoapods

    一.升级ruby环境,由于目前淘宝Ruby镜像升级有问题,所以使用了 http://rubygems-china.oss.aliyuncs.com 二.需要操作的步骤: 1.检查你的ruby源,终端输 ...

  2. HNOI2015 Day 2题解

    昨天做了HNOI day 2,感觉好像还是可做的,想当年什么splay还是高级算法,现在点剖什么就老考了简直丧病,虽然第二题还没写那就先当下嘴巴选手吧= = T1:[HNOI2015]落忆枫音 描述: ...

  3. 关于rem的使用和less编译工具考拉

    前提: 1.使用rem的前提是首先要设置好页面的根节点的大小: <script> (function(){ var html = document.documentElement; var ...

  4. arguments及arguments.callee

    首先有一个JavaScript函数 function test(a, b, c, d) { return a + b; } 在JavaScript中调用一个函数的实参个数可以和被调用函数的形参个数不匹 ...

  5. ajax跨域问题及解决

    overview ajax是一种创建交互式网页应用的网页开发技术,是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换.而ajax的跨域问题则是请求了其他项目的接口地址,当协议.子域名 ...

  6. angular : $eval & $timeout

    $digest: function() { var watch, value, last, watchers, length, dirty, ttl = TTL, next, current, tar ...

  7. c#之循环效率

    很多人在保存数据时候对于使用数组.集合等?然后遍历数据的时候是for.froeach? 下面我就写一个小例子进行测试看看,话不多说,直接用数据说话. 1.构建数据分别是数组.集合构建,数据类型分别是值 ...

  8. Android Http请求头与响应头的学习

    本节引言: 上节中我们对Android涉及的网络编程进行了了解,也学习了下Http的基本概念,而本节我们 要学习的是Http的请求头与响应头,当然,可以把也可以把这节看作文档,用到的时候来查查 即可! ...

  9. 关于Storm tick

    关于Storm tick 1. tick的功能 Apache Storm中内置了一种定时机制——tick,它能够让任何bolt的所有task每隔一段时间(精确到秒级,用户可以自定义)收到一个来自__s ...

  10. 微信小程序之提高应用速度小技巧

    作者:vicyao, 腾讯web前端开发 高级工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/294.htm ...