二、实际开发中的使用
代码示例(演示2):
1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController () 5 6 7 @end 8 9 @implementation YYViewController 10 11 - (void)viewDidLoad 12 { 13 [super viewDidLoad]; 14 } 15 16 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 17 { 18 //下载服务器上的文件 19 [self download1]; 20 } 21 22 #pragma mark-下载文件 23 //演示1 24 -(void)download 25 { //1.创建请求对象 26 NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"]; 27 ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; 28 29 //2.添加请求参数(请求体中的参数) 30 [request setDataReceivedBlock:^(NSData *data) { 31 NSLog(@"%d",data.length); 32 }]; 33 34 //3.异步发送网络请求 35 [request startAsynchronous]; 36 } 37 38 //演示2 39 -(void)download1 40 { 41 //1.创建请求对象 42 NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"]; 43 ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; 44 45 //2.设置下载文件保存的路径 46 NSString *cachepath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; 47 NSString *filename=[cachepath stringByAppendingPathComponent:@"video.zip"]; 48 request.downloadDestinationPath=filename; 49 NSLog(@"%@",filename); 50 51 //3.发送网络请求(异步) 52 [request startAsynchronous]; 53 54 //4.当下载完成后通知 55 [request setCompletionBlock:^{ 56 NSLog(@"下载成功"); 57 }]; 58 } 59 60 @end |
下载成功:
代码说明:
在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可(参照上面的代码)。
(1)创建请求对象;
(2)设置下载文件保存的路径;
(3)发送下载文件的网络请求(异步)。
按照上面的几个步骤执行,程序会自动开启异步线程,一点一点的把数据写入到指定的文件路径,而且不论是下载多大的文件都不会占用大量的内存空间。
asi框架是基于底层的cfnoteworking的,性能很好。当然也可以设置block,或者是监听下载的进度。
下面介绍使用asi框架下载文件,如何监听下载的进度。
设置下载代理,注意不是控制器代理。
代码示例:
1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController ()<ASIProgressDelegate> 5 @property (weak, nonatomic) IBOutlet UIProgressView *progress; 6 @end 7 8 @implementation YYViewController 9 10 - (void)viewDidLoad 11 { 12 [super viewDidLoad]; 13 } 14 15 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 16 { 17 //下载服务器上的文件 18 [self download]; 19 } 20 21 #pragma mark-下载文件 22 -(void)download 23 { 24 //1.创建请求对象 25 NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"]; 26 ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; 27 28 //2.设置下载文件保存的路径 29 NSString *cachepath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; 30 NSString *filename=[cachepath stringByAppendingPathComponent:@"video.zip"]; 31 request.downloadDestinationPath=filename; 32 NSLog(@"%@",filename); 33 34 //3.设置下载进度的代理 35 request.downloadProgressDelegate=self.progress; 36 37 //4.发送网络请求(异步) 38 [request startAsynchronous]; 39 40 //5.下载完毕后通知 41 [request setCompletionBlock:^{ 42 NSLog(@"文件已经下载完毕"); 43 }]; 44 } 45 46 #pragma mark-监听下载进度的代理方法 |
asi的文件下载还有一个属性可以设置是否支持断点下载。
设置支持断点下载的代码如下:
request.allowResumeForFileDownloads=YES;
这样的话,比如一个文件已经下载了百分之30到程序的沙盒中,这个时候取消了下载。当下一次点击下载文件的时候,会接着下载剩余的百分之70并一点一点的写入到沙盒中。
提示:取消下载的代码为:
[request clearDelegatesAndCancel];