码迷,mamicode.com
首页 > 移动开发 > 详细

iOS ASI--文件下载

时间:2015-01-26 10:10:02      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

1.方法一:如果NSData数据很大,把很大的数据装进内存,内存肯定会爆掉,所以这种方法不可取

    // 设置url

    NSURL *url = [NSURL URLWithString:@"http://localhost/123.jpg"];

    // 设置请求

    self.request = [ASIHTTPRequest requestWithURL:url];

    // 接收到服务器返回的数据

    [self.request setDataReceivedBlock:^(NSData *data) {

        NSLog(@"-----%d",data.length);

    }];

    // 发起请求

    [self.request startAsynchronous];

 

2.方法二:

    // 设置url

    NSURL *url = [NSURL URLWithString:@"http://localhost/123.jpg"];

    // 设置请求

    self.request = [ASIHTTPRequest requestWithURL:url];

    // 设置文件本地存放的路径

    NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    NSString *cachePath = [cache stringByAppendingPathComponent:@"cache.db"];

    [self.request setDownloadDestinationPath:cachePath];

    // 下载完成时调用

    [self.request setCompletionBlock:^{

        NSLog(@"下载完咯,用ASI下载,就是这么轻轻松松搞定!");

    }];

    // 发起请求

    [self.request startAsynchronous];

3. 监听下载的进度,先要遵守ASIProgressDelegate协议

    // 设置url

    NSURL *url = [NSURL URLWithString:@"http://localhost/123.jpg"];

    // 设置请求

    self.request = [ASIHTTPRequest requestWithURL:url];

    // 设置文件本地存放的路径

    NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    NSString *cachePath = [cache stringByAppendingPathComponent:@"cache.db"];

    [self.request setDownloadDestinationPath:cachePath];

    // 设置下载进度代理 

  self.request.downloadProgressDelegate = self;

    // 接收到服务器返回的数据

    [self.request setCompletionBlock:^{

        NSLog(@"下载完咯");

    }];

    // 发起请求

    [self.request startAsynchronous];

}

#pragma mark - ASIProgressDelegate

- (void)setProgress:(float)newProgress{

    NSLog(@"下载进度:%f",newProgress);

}

补充:如果能拿到进度条控件,监听下载进度还有一种写法

self.request.downloadProgressDelegate = self.progressView;

/*   代理方法可以省略不写,因为把self.progressView有progress属性,意味着progressView内部已经实现了progress的set方法,正好downloadProgressDelegate的代理方法就是setProgress: ,所以下面这段代码可以省略

- (void)setProgress:(float)newProgress{

    self.progressView.progress = newProgress

}   */

4.支持断点续传   [self.request setAllowResumeForFileDownloads:YES];  把这句代码加上就OK了

原理:假设有个按钮,点击按钮执行这个方法 [self.request clearDelegatesAndCancel];然后ASI会把已经下载好的数据放到沙盒缓存,下次再下载时,会自动将新数据拼接到已下载好的旧数据上.

 

iOS ASI--文件下载

标签:

原文地址:http://www.cnblogs.com/oumygade/p/4249323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!