首页 > 代码库 > ASIHTTPRequest 1.x:断点续传
ASIHTTPRequest 1.x:断点续传
撰写于 2012 年 11 月 6 日 | 转载自 : http://itjoy.org/?p=469
ASIHTTPRequest支持断点续传,断点续传的时候我们要设置一个临时容器来接收数据,当数据完全下载完毕的时候,文件将从临时文件夹移入到指定文件夹,自动删除临时文件夹中的内容。
代码实例:下载一首歌曲
////////////////- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view. //progress self.progressIndicator = [[[UIProgressView alloc]initWithFrame:CGRectMake(10, 80, 300, 10)]autorelease]; [self.view addSubview:self.progressIndicator]; ///startBtn UIButton *startBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; startBtn.frame = CGRectMake(20, 100, 100, 60); [startBtn setTitle:@"Start" forState:UIControlStateNormal]; [startBtn addTarget:self action:@selector(downloadStart:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:startBtn]; UIButton *pauseBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; pauseBtn.frame = CGRectMake(200, 100, 100, 60); [pauseBtn setTitle:@"Pause" forState:UIControlStateNormal]; [pauseBtn addTarget:self action:@selector(downloadPause:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:pauseBtn]; }- (void)downloadStart:(UIButton *)btn{ ///创建请求 self.request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://zhangmenshiting.baidu.com/data2/music/35417538/13880429190800192.mp3?xcode=ead0f4d3b15d47b6273650a58d1b4b7f"]]; ///设置代理 self.request.delegate = self; //进度显示 self.request.downloadProgressDelegate = self.progressIndicator; ///另一种获取进度的方法,需要遵守ASIProgressDelegate协议 //self.request.downloadProgressDelegate = self; ///精确显示进度信息 self.request.showAccurateProgress = YES; //文件存储目录 NSString *savePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"safe&sound.mp3"]; NSLog(@"savePath=%@",savePath); ///文件临时目录 NSString *temp = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"temp"]; // NSString *tempPath = [temp stringByAppendingPathComponent:@"temp.mp3"]; NSLog(@"tempPaht=%@",tempPath); //如果临时目录不存在则创建 NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL fileExists = [fileManager fileExistsAtPath:tempPath]; if (!fileExists) { [fileManager createDirectoryAtPath:temp withIntermediateDirectories:YES attributes:nil error:nil]; } //设置存储目录 self.request.downloadDestinationPath = savePath; //设置临时目录 self.request.temporaryFileDownloadPath = tempPath; //允许断点续传 self.request.allowResumeForFileDownloads = YES; //下载完毕执行 self.request.didFinishSelector = @selector(FetchDataFinished:); //下载失败执行 self.request.didFailSelector = @selector(FetchDataFailed:); //下载信息上下文 self.request.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"safe&sound",@"music", nil]; //开始异步下载 [self.request startAsynchronous]; }#pragma mark -- pause method- (void)downloadPause:(UIButton *)btn{ [self.request clearDelegatesAndCancel];}#pragma mark -- request delegate- (void)requestStarted:(ASIHTTPRequest *)request{ NSLog(@"request start");}- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders{ NSLog(@"receive responseHeader");}//- (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes//{ //如果自己实现那个进度条,就遵守ASIProgressDelegate 实现此方法即可,获取大小,更新进度条// NSLog(@"total=%lld",request.totalBytesRead);// NSLog(@"length=%lld",request.contentLength);//}#pragma mark -- finish & fail- (void)FetchDataFinished:(ASIHTTPRequest *)request{ NSLog(@"finished"); NSLog(@"reqest.userinfo=%@",[request.userInfo objectForKey:@"music"]);}- (void)FetchDataFailed:(ASIHTTPRequest *)request{ NSLog(@"failed"); NSLog(@"error=%@",[request.error localizedDescription]);}
ASIHTTPRequest 1.x:断点续传
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。