NSURLConnection实现大文件下载
来源:互联网 发布:c语言long double输出 编辑:程序博客网 时间:2024/05/16 08:32
NSURLConnection实现大文件下载
1.方案:利用NSURLConnection和它的代理方法
1>发送一个请求// 1.URL
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos.zip"];
// 2.请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3.下载(创建完conn对象后,会自动发起一个异步请求)
[NSURLConnection connectionWithRequest:request delegate:self];
2>在代理方法中处理服务器返回的数据
/**
在接收到服务器的响应时:
1.创建一个空的文件
2.用一个句柄对象关联这个空的文件,目的是:方便后面用句柄对象往文件后面写数据
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// 文件路径
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,YES) lastObject];
NSString *filepath = [caches stringByAppendingPathComponent:@"videos.zip"];
// 创建一个空的文件 到 沙盒中
NSFileManager *mgr = [NSFileManager defaultManager];
[mgr createFileAtPath:filepath contents:nilattributes:nil];
// 创建一个用来写数据的文件句柄
self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filepath];
//获得文件的总大小
self.totalLength= response.expectedContentLength;
}
/**
在接收到服务器返回的文件数据时,利用句柄对象往文件的最后面追加数据
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// 移动到文件的最后面
[self.writeHandle seekToEndOfFile];
// 将数据写入沙盒
[self.writeHandle writeData:data];
self.totalLength= response.expectedContentLength;
}
/**
在接收到服务器返回的文件数据时,利用句柄对象往文件的最后面追加数据
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// 移动到文件的最后面
[self.writeHandle seekToEndOfFile];
// 将数据写入沙盒
[self.writeHandle writeData:data];
//累计文件的长度
self.currentLength+= data.length;
NSLog(@"下载进度:%f", (double)self.currentLength/self.totalLength);
self.circleView.progress= (double)self.currentLength/self.totalLength;
}
/**
在所有数据接收完毕时,关闭句柄对象
*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
self.currentLength+= data.length;
NSLog(@"下载进度:%f", (double)self.currentLength/self.totalLength);
self.circleView.progress= (double)self.currentLength/self.totalLength;
}
/**
在所有数据接收完毕时,关闭句柄对象
*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
self.currentLength= 0;
self.totalLength= 0;
// 关闭文件
[self.writeHandle closeFile];
self.writeHandle =nil;
}
注意:千万不能用NSMutableData来拼接服务器返回的数据
self.totalLength= 0;
// 关闭文件
[self.writeHandle closeFile];
self.writeHandle =nil;
}
注意:千万不能用NSMutableData来拼接服务器返回的数据
2 0
- NSURLConnection实现大文件下载
- 使用NSURLConnection实现大文件断点下载
- 使用NSURLConnection实现大文件断点下载
- 使用NSURLConnection实现大文件断点下载
- NSURLConnection下载大文件
- IOS - NSURLConnection大文件下载
- NSURLConnection下载一个大文件
- NSURLSession NSURLConnection下载大文件 断点下载
- NSURLConnection和NSURLSession大文件下载
- 网络---大文件的下载(NSURLConnection)
- (有码)NSURLConnection大文件下载
- iOS开发 使用NSURLConnection实现下载文件
- iOS开发网络篇 一一 NSURLConnection-大文件断点下载
- NSUrlConnection 下载文件
- 通过NSURLConnection下载文件
- NSURLConnection 下载文件增强版
- 使用NSURLConnection实现断点下载
- NSURLConnection下载大小文件,断点下载
- 《数据结构面试题》
- 《位图 - Bitmap》
- 安卓Android连MySql错误解决
- Ubuntu下搭建Node.js+express web开发框架
- Oracle建立表空间和用户
- NSURLConnection实现大文件下载
- 【智能家居】Raspberry Pi 系统安装篇
- CentOS安装NodeJS及Express开发框架
- tyvj1544找啊找啊找GF
- B - Vanya and Lanterns
- C指针编程之道 ---第四次笔记
- 总结的层次
- 桥接模式
- 《C++ Prime Plus 第七章》—数组、函数、指针初步