网络编程---(数据请求+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