1 @interface ViewController ()<NSURLConnectionDataDelegate> 2 { 3 // 文件的总大小 4 long long _total; 5 // 当前下载 6 long long _current; 7 } 8 9 // 文件句柄10 @PRoperty (nonatomic,strong)NSFileHandle *fileHandle;11 // 连接对象12 @property (nonatomic,strong)NSURLConnection *conn;13 @property (weak, nonatomic) IBOutlet UiprogressView *progress;14 @property (weak, nonatomic) IBOutlet UIButton *button;15 @end16 17 @implementation ViewController18 - (void)viewDidLoad {19 [super viewDidLoad];20 self.progress.progress = 0;21 // Do any additional setup after loading the view, typically from a nib.22 }23 24 - (IBAction)buttonAction:(UIButton *)sender {25 if ([[sender titleForState:UIControlStateNormal]isEqualToString:@"开始"]) {26 [sender setTitle:@"暂停" forState:(UIControlStateNormal)];27 // 请求28 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:kUrl]];29 // 设置请求参数30 NSString *rang = [NSString stringWithFormat:@"byte:%lld",_current];31 NSLog(@"request:%@end",request);32 [request setValue:rang forHTTPHeaderField:@"Range"];33 NSLog(@"request:%@end",request);34 // 建立连接35 self.conn = [NSURLConnection connectionWithRequest:request delegate:self];36 // 开始请求37 [_conn start];38 }else{39 [sender setTitle:@"开始" forState:(UIControlStateNormal)];40 // 取消41 [_conn cancel];42 }43 }44 45 - (void)didReceiveMemoryWarning {46 [super didReceiveMemoryWarning];47 // Dispose of any resources that can be recreated.48 }49 50 #pragma mark---delegate51 // 收到响应52 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response53 {54 // 获取总文件大小(总文件的大小在响应里面可以获得)55 _total = response.expectedContentLength;56 // 创建文件57 NSFileManager *manager = [NSFileManager defaultManager];58 NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];59 NSString *filePath = [cachesPath stringByAppendingPathComponent:@"music.mp3"];60 NSLog(@"%@",cachesPath);61 // 创建文件62 [manager createFileAtPath:filePath contents:nil attributes:nil];63 // 让文件句柄指向文件64 self.fileHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];65 }66 // 接收到数据67 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data68 {69 // 计算当前总大小70 _current += data.length;71 // 更新 (在子线程中不能更新UI)72 [self performSelectorOnMainThread:@selector(updateProgress) withObject:self waitUntilDone:YES];73 // 指向文件末尾74 [self.fileHandle seekToEndOfFile];75 // 写数据76 [self.fileHandle writeData:data];77 }78 // 结束79 - (void)connectionDidFinishLoading:(NSURLConnection *)connection80 {81 NSLog(@"下载完毕");82 }83 // 更新progress84 - (void)updateProgress85 {86 self.progress.progress = (long double)_current / (long double)_total;87 }88 89 @end
新闻热点
疑难解答