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

点击“开始传输”按钮,将网络上的大文件先下载下来,下载完成后,保存到本地。



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: green:1 blue:1 alpha:0.7];

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

    slider.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.7 alpha:0.2];

    slider.minimumValue=;    //设置最小值

    slider.maximumValue=1;    //设置最大值

    slider.value=;           //设置起始值

    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(, , 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

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

iOS秒表功能实现详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。