美文网首页
Connection 断点下载

Connection 断点下载

作者: nothing_c | 来源:发表于2016-10-28 00:02 被阅读11次

{

NSURLConnection *_connection;

//文件句柄,缓存文件,必须存在

NSFileHandle *_handle;

long long _receiveSize;

long long _totalSize;

}

- (IBAction)StartAndPauseAction:(id)sender {

NSString *destionPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Cache/destion/aa.mov"];

NSLog(@"destionPath ---> %@",destionPath);

//判断文件是否存在

if(![[NSFileManager defaultManager] fileExistsAtPath:destionPath]) {

if(self.btn.tag == 1) {

//实现下载

NSString *tempPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Cache/temp/aa.mov"];

//获取文件的大小.属性等

NSDictionary *Dic = [[NSFileManager defaultManager] attributesOfItemAtPath:tempPath error:nil];

//获得已经下载的文件大小

_receiveSize= [[Dic objectForKey:NSFileSize] longLongValue];

NSString *urlStr =@"http://localhost:8080/UpLoad/XiaTianXieZouQu.rmvb";

urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];

//key:Range表示返回数据的范围

//value:bytes=0-1000表示从0开始返回1000个字节

//value:bytes=1000-表示返回第1000个字节之后的所有数据

[request addValue:[NSString stringWithFormat:@"bytes=%lld-",_receiveSize] forHTTPHeaderField:@"Range"];

_connection = [NSURLConnection connectionWithRequest:request delegate:self];

self.btn.tag= 2;

[self.btn setTitle:@"正在下载" forState:UIControlStateNormal];

}else{

//暂停

[_connection cancel];

self.btn.tag=1;

[self.btn setTitle:@"继续下载" forState:UIControlStateNormal];

}

}else{

NSLog(@"文件已存在");

}

}

#pragma mark -- NSURLConnectionDataDelegate,NSURLConnectionDelegate

- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response {

NSString *filePath =@"Cache/temp";

filePath = [filePath getExistsFilePathWithFileName:@"aa.mov"];

_handle = [NSFileHandle fileHandleForWritingAtPath:filePath];

NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse*)response;

_totalSize = HTTPResponse.expectedContentLength + _receiveSize;

}

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

_receiveSize =_receiveSize+ data.length;

self.ProgressView.progress= (float)_receiveSize/_totalSize;

NSLog(@"总的:%lld  progress:%f",_totalSize,self.ProgressView.progress);

//从文件末尾写入

[_handle seekToFileOffset:[_handle seekToEndOfFile]];

[_handle writeData:data];

}

- (void)connectionDidFinishLoading:(NSURLConnection*)connection {

[_handle closeFile];

//搬移文件

//获取原路径

NSString *tempPath =@"Cache/temp";

tempPath = [tempPath getExistsFilePathWithFileName:@"aa.mov"];

//获取最终路径目标路径

NSString *destionPatn =@"Cache/destion";

destionPatn = [destionPatn getExistsFilePath];

destionPatn = [destionPatn stringByAppendingString:@"/aa.mov"];

NSLog(@"destionPatn ---> %@",destionPatn);

if([[NSFileManager defaultManager] moveItemAtPath:tempPath toPath:destionPatn error:nil]) {

NSLog(@"文件搬移成功");

}else{

NSLog(@"12");

}

}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSErro r*)error {

NSLog(@"下载失败");

}

相关文章

  • Connection 断点下载

    { NSURLConnection *_connection; //文件句柄,缓存文件,必须存在 NSFileHa...

  • 基于Okhttp实现断点下载(续传)和分片下载

    断点下载/续传 断点下载是针对下载大文件需求的一种优化机制,可以从上次下载的断点处继续下载。断点续传原理也相同,只...

  • 断点下载

    效果图 断点下载的过程 这里是简单的一个下载,下一篇介绍列表的断点下载1.绘制UI图,并初始化控件2.创建实体类:...

  • 断点下载

    今天做了断点下载视频或者MP3,具体实现如下 1、主要应用了NSURLSessionDownloadTask和NS...

  • 断点下载

    链接转载;判断当前Service是否是重启的Servciehttp://blog.csdn.net/luyi325...

  • 断点下载

    http://www.jianshu.com/p/f65e32012f07

  • 断点下载

    断点下载重点 利用HTTP请求头的Range属性,就可以实现从指定位置开始下载表示头500个字节:Range: b...

  • 断点下载

    需要遵循NSURLConnectionDataDelegate协议/** 当前的长度/@property (no...

  • 断点下载

  • OC网络:NSURLSession-downloadTask的断

    NSURLSessionDownloadDelegate断点下载说明: 能实现断点下载,即在程序不退出的情况下:暂...

网友评论

      本文标题:Connection 断点下载

      本文链接:https://www.haomeiwen.com/subject/eibsuttx.html