NSURLConnection实现大文件下载

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:nil
attributes: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.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来拼接服务器返回的数据

时间: 2024-12-15 21:59:19

NSURLConnection实现大文件下载的相关文章

iOS开发之网络编程--使用NSURLConnection实现大文件下载

主要思路(实现下载数据分段写入缓存中) 1.使用NSURLConnectionDataDelegate以及代理方法.2.在成功获取响应的代理方法中,获得沙盒全路径,并在该路径下创建空文件和文件句柄.3.在获取data的代理方法中,先设置句柄在沙盒全路径文件末尾,然后通过句柄写入data数据.4.在文件下载完的代理方法中,关闭句柄同时设置句柄引用为nil释放句柄和指针. 使用句柄的思路图(红色的箭头表示句柄,灰色的箭头表示移动的路径): 代码关键词: 类:NSFileHandle的方法 1.fil

IOS NSURLConnection(大文件下载)

一.大文件下载 1.方案:利用NSURLConnection和它的代理方法1> 发送一个请求// 1.URLNSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos.zip"];// 2.请求NSURLRequest *request = [NSURLRequest requestWithURL:url];// 3.下载(创建完conn对象后,会自动发起一个异步请求)[N

大文件下载--断点续传--NSURLConnection

有了上一篇文章的铺垫直接上代码,下面是分析原理. // ViewController.m // 大文件下载 // Created by apple on 15/11/11. // Copyright © 2015年 LDSmallCat. All rights reserved. #import "ViewController.h" #import "DACircularProgressView.h"//进度条的第三方框架 @interface ViewContro

ios开发网络学习三:NSURLConnection小文件大文件下载

一:小文件下载 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> /** 注释 */ @property (nonatomic, strong) NSMutableData *fileData; @property (nonatomic, assign) NSInteger totalSize; @property (weak, nonatomic) IB

OC - 16.大文件下载

大文件下载注意事项 若不对下载的文件进行转存,会造成内存消耗急剧升高,甚至耗尽内存资源,造成程序终止. 在文件下载过程中通常会出现中途停止的状况,若不做处理,就要重新开始下载,浪费流量. 大文件下载的解决方案 对下载文件进行处理,每下载一点数据,就将数据写到磁盘中(通常是沙盒中),避免在内存累积数据(NSURLConnection下载) 使用NSFileHandle类实现写数据 使用NSOutputStream类实现写数据 当下载任务终止时,记录任务终止时的位置信息,以便下次开始继续下载 大文件

2016 - 1- 23 大文件下载

---恢复内容开始--- 一: 利用NSFileHandle对象实现大文件下载 1.要了解NSFileHandle的用法,注意下载完要关闭这个对象.还要记得每次写入之前将它的文件指针挪位! // // ViewController.m // 多值参数 // // Created by Mac on 16/1/23. // Copyright © 2016年 Mac. All rights reserved. // #define ZZFile [ [NSSearchPathForDirector

网络编程---(数据请求+slider)将网络上的大文件下载到本地,并打印其进度

网络编程---将网络上的大文件下载到本地,并打印其进度. 点击"开始传输"按钮,将网络上的大文件先下载下来,下载完成后,保存到本地. UI效果图如下:            具体代码如下: //  ViewController.m //  0611---数据请求+滚动条 #import "ViewController.h" unsigned long tempLength; @interface ViewController () <NSURLConnecti

源码0603-01-了解-大文件下载(NSOutputStream)

NSOutputStream 数据流的使用 // ViewController.m // 01-了解-大文件下载(NSOutputStream) #import "ViewController.h" @interface ViewController () <NSURLConnectionDataDelegate> /** 输出流对象 */ @property (nonatomic, strong) NSOutputStream *stream; @end @impleme

IOS-网络(大文件下载)

一.不合理方式 1 // 2 // ViewController.m 3 // IOS_0131_大文件下载 4 // 5 // Created by ma c on 16/1/31. 6 // Copyright © 2016年 博文科技. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController ()<NSURLConnectionDataDelegate&