您的位置:首页 > 理论基础 > 计算机网络

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

2015-06-11 20:17 615 查看
网络编程---将网络上的大文件下载到本地,并打印其进度。
点击“开始传输”按钮,将网络上的大文件先下载下来,下载完成后,保存到本地。

UI效果图如下:





具体代码如下:

// ViewController.m

// 0611---数据请求+滚动条

#import "ViewController.h"

unsigned
long tempLength;

@interface
ViewController () <NSURLConnectionDataDelegate>
{

NSMutableData * resultData;

UISlider * _slider;
}

@end

@implementation ViewController

- (void)viewDidLoad {

[super
viewDidLoad];

[self
_loadView];
}

- (void) _loadView
{

self.view.backgroundColor=[UIColor
colorWithRed:0
green:1
blue:1
alpha:0.7];

UISlider * slider=[[UISlider
alloc]initWithFrame:CGRectMake(0,
200, self.view.frame.size.width,
40)];

slider.backgroundColor=[UIColor
colorWithRed:0.1
green:0.1
blue:0.7
alpha:0.2];
slider.minimumValue=0;
//设置最小值
slider.maximumValue=1;
//设置最大值
slider.value=0;
//设置起始值
slider.enabled=YES;

_slider=slider;
[self.view
addSubview:slider];

// NSLog(@"%f",self.view.frame.size.width); 375

// NSLog(@"%f",self.view.frame.size.height); 667

UIButton * button=[[UIButton
alloc]initWithFrame:CGRectMake(0,
0, 120,
50)];

button.center=self.view.center;

[button setTitle:@"开始传输"
forState:UIControlStateNormal];

[button setTitleColor:[UIColor
redColor] forState:UIControlStateNormal];

button.backgroundColor=[UIColor
colorWithRed:0.1
green:0.1
blue:0.1
alpha:0.4];

[button addTarget:self
action:@selector(startTransition)
forControlEvents:UIControlEventTouchUpInside];
[self.view
addSubview: button];

}

- (void)startTransition
{

NSLog(@"点击了按钮~");

//通过URL建立请求对象

NSURL * url=[NSURL
URLWithString:@"http://192.168.2.106/hahaha.zip"];

NSURLRequest * request=[NSURLRequest
requestWithURL:url];

//创建NSURLConnection
对象用来连接服务器并且发送请求

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

[conn
start];
}

#pragma mark - 代理方法

//接受到响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{

NSLog(@"-------%lu",(unsigned
long)response.expectedContentLength);

tempLength=(unsigned
long)response.expectedContentLength;

resultData =[NSMutableData
data];

}

//接收到数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData
*)data
{
[resultData
appendData:data];

_slider.value=(float)resultData.length/(float)tempLength;

NSLog(@"%lu ***** %f",(unsigned
long)resultData.length,_slider.value);
}

//结束下载
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{

NSLog(@"下载结束,保存到本地文件");

//创建一个文件

NSFileManager * manager=[NSFileManager
defaultManager];

//用path保存路径

NSString * path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES)
firstObject];

path=[path stringByAppendingPathComponent:@"hahaha1.zip"];

NSLog(@"%@", path);

//在路径下创建文档并将数据写入文档

[manager createFileAtPath:path
contents:resultData
attributes:nil];
}

//请求失败
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{

NSLog(@"didFailWithError");
}

@end

需要注意的是,slider的值是两个数之比,要保证两个数是float类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: