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

网络编程---将网络上的大文件下载到本地,并打印其进度。

点击開始传输button。将网络上的大文件先下载下来,下载完毕后,保存到本地。



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(@"点击了button~");

    //通过URL建立请求对象

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

    NSURLRequest * request=[NSURLRequest requestWithURL:url];



    //创建NSURLConnection 对象用来连接server而且发送请求

    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类型。

posted @ 2016-03-14 21:32  zfyouxi  阅读(181)  评论(0编辑  收藏  举报