1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #import "ViewController.h"
@interface ViewController ()<NSURLConnectionDataDelegate> @property(nonatomic,strong) NSFileHandle *writeHandle; @property(nonatomic,assign) long long totalLength; @property(nonatomic,assign) long long currentLength;
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self download]; } -(void)download { //1-URL NSURL *url=[NSURL URLWithString:@"http://localhost:8080//MJServer/resources/videos.zip"]; //2-请求 NSURLRequest *request=[NSURLRequest requestWithURL:url]; //3-下载 [NSURLConnection connectionWithRequest:request delegate:self]; } //-请求失败时调用(请求超时,网络异常) -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"didFailWithError--"); } //-接收到服务器的响应聚会调用 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"didReceiveResponse--"); //文件路径 NSString *caches=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]; NSString *filePath=[caches stringByAppendingPathComponent:@"videos.zip"]; //创建一个空的文件到沙盒中 NSFileManager *mgr=[NSFileManager defaultManager]; [mgr createFileAtPath:filePath contents:nil attributes:nil]; //创建一个用来写数据的句柄 self.writeHandle=[NSFileHandle fileHandleForWritingAtPath:filePath]; //获得文件的总大小 self.totalLength=response.expectedContentLength;
} //当接收到服务器返回到实体数据时调用(具体内容,这个内容可被调用多次) -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //移动到文件的最后面 [self.writeHandle seekToEndOfFile]; //写入数据到沙盒中 [self.writeHandle writeData:data]; self.currentLength+=data.length; NSLog(@"下载进度:%f",(double)self.currentLength/self.totalLength); } //加载完毕后调用(服务器的数据已经完全返回后) -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connectionDidFinishLoading--"); self.currentLength=0; self.totalLength=0; //关闭文件 [self.writeHandle closeFile]; self.writeHandle=nil; } @end
|