您的位置:首页 > 移动开发 > IOS开发

iOS 文件下载

2015-10-22 13:59 369 查看
-(void)downloadWithURL :(NSString *)url {

//创建下载路径
// NSURL *urlEncode = [NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURL *urlEncode = [NSURL URLWithString:url];
//创建一个请求
NSURLRequest *request=[NSURLRequest requestWithURL:urlEncode];

//发送请求(使用代理的方式)
NSURLConnection *connt=
[NSURLConnection connectionWithRequest:request delegate:self];
[connt start];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

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

NSString *createPath=[caches stringByAppendingPathComponent:@"MyMusicDownload"];

//创建一个文件夹,到沙盒中
NSFileManager *mgr=[NSFileManager defaultManager];
// [mgr createFileAtPath:filePath contents:nil attributes:nil];

if ([[NSFileManager defaultManager] fileExistsAtPath:createPath])//判断createPath路径文件夹是否已存在,此处createPath为需要新建的文件夹的绝对路径
{

}
else
{

[[NSFileManager defaultManager] createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:nil];//创建文件夹
}
NSString *filePath=[createPath stringByAppendingPathComponent:response.suggestedFilename];

// NSLog(@"%@",response.suggestedFilename);
[mgr createFileAtPath:filePath contents:nil attributes:nil];
//3.创建写数据的文件句柄
self.writeHandle=[NSFileHandle fileHandleForWritingAtPath:filePath];

//4.获取完整的文件的长度
self.sumLength=response.expectedContentLength;

if (self.delegate&&[self.delegate respondsToSelector:@selector(startDownload)]) {
[self.delegate startDownload];

}

}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

//累加接收到的数据
self.currentLength+=data.length;

//计算当前进度(转换为double型的)
double progress=(double)self.currentLength/self.sumLength;
if (self.delegate&&[self.delegate respondsToSelector:@selector(setProgressView:)]) {

[self.delegate setProgressView:progress];
}
//  self.progress.progress=progress;

//一点一点接收数据。
NSLog(@"接收到服务器的数据!---%lu",(unsigned long)data.length);

//把data写入到创建的空文件中,但是不能使用writeTofile(会覆盖)
//移动到文件的尾部
[self.writeHandle seekToEndOfFile];
//从当前移动的位置,写入数据
[self.writeHandle writeData:data];

}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"下载完毕");

//关闭连接,不再输入数据在文件中
[self.writeHandle closeFile];
//销毁
self.writeHandle=nil;

//在下载完毕后,对进度进行清空
self.currentLength=0;
self.sumLength=0;

globalVariable = [GlobalVariable sharedManager];
[globalVariable setArrDoneDownloadList:[_arrWillDownload objectAtIndex:0]];
[[NSNotificationCenter defaultCenter]postNotificationName:@"arrMutDoneDownloadChange" object:nil];

if(_arrWillDownload.count != 0){
[_arrWillDownload removeObjectAtIndex:0];
}
if (self.delegate&&[self.delegate respondsToSelector:@selector(finishDownload)]) {
[self.delegate finishDownload];
}

if(_arrWillDownload.count != 0){

[self startDownload];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: