NSURLConnection 大文件下载

#import "ViewController.h"

@interface ViewController ()<NSURLConnectionDataDelegate>

@property (weak, nonatomic) IBOutlet UIProgressView *progressView;

@property (nonatomic, assign) NSInteger totalSize;

@property (nonatomic, assign) NSInteger currentSize;

/** 沙盒路径 */

@property (nonatomic, strong) NSString *fullPath;

/** 连接对象 */

@property (nonatomic, strong) NSURLConnection *connect;

/** 输出流*/

@property (nonatomic, strong) NSOutputStream *stream;

@end

@implementation ViewController

- (IBAction)startBtnClick:(id)sender {

[self download];

}

- (IBAction)cancelBtnClick:(id)sender {

[self.connect cancel];

}

- (IBAction)goOnBtnClick:(id)sender {

[self download];

}

//内存飙升

-(void)download

{

//1.url

NSURL *url = [NSURL URLWithString:@"http://www.33lc.com/article/UploadPic/2012-10/2012102514201759594.jpg"];

//2.创建请求对象

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

//设置请求头信息,告诉服务器值请求一部分数据range

/*

bytes=0-100

bytes=-100

bytes=0- 请求100之后的所有数据

*/

NSString *range = [NSString stringWithFormat:@"bytes=%zd-",self.currentSize];

[request setValue:range forHTTPHeaderField:@"Range"];

NSLog(@"+++++++%@",range);

//3.发送请求

NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:request delegate:self];

self.connect = connect;

}

#pragma mark ----------------------

#pragma mark NSURLConnectionDataDelegate

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

{

NSLog(@"didReceiveResponse");

//1.得到文件的总大小(本次请求的文件数据的总大小 != 文件的总大小)

// self.totalSize = response.expectedContentLength + self.currentSize;

if (self.currentSize >0) {

return;

}

self.totalSize = response.expectedContentLength;

//2.写数据到沙盒中

self.fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"123.jpg"];

NSLog(@"%@",self.fullPath);

//3.创建输出流

//    NSOutputStream

//    NSInputStream

/*

第一个参数:文件的路径

第二个参数:YES 追加

特点:如果该输出流指向的地址没有文件,那么会自动创建一个空的文件

*/

NSOutputStream *stream = [[NSOutputStream alloc]initToFileAtPath:self.fullPath append:YES];

//打开输出流

[stream open];

self.stream = stream;

}

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

{

//写数据

[self.stream write:data.bytes maxLength:data.length];

//3.获得进度

self.currentSize += data.length;

//进度=已经下载/文件的总大小

NSLog(@"%f",1.0 *  self.currentSize/self.totalSize);

self.progressView.progress = 1.0 *  self.currentSize/self.totalSize;

//NSLog(@"%@",self.fullPath);

}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

//关闭流

[self.stream close];

self.stream = nil;

NSLog(@"connectionDidFinishLoading");

NSLog(@"%@",self.fullPath);

}

@end

时间: 2024-10-05 14:09:56

NSURLConnection 大文件下载的相关文章

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

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

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.下载(创建完c

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

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&