-(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];
}
}
iOS 文件下载
最新推荐文章于 2023-03-10 10:05:40 发布