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

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

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

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

时间: 2024-10-12 13:30:50

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

IOS开发之网络编程(请求数据和断点续传)

IOS开发中网络编程应用场景:JSON数据获取,网络数据的下载. 一:请求JSON数据一般用异步请求的方式,如果用同步请求,则会造成IOS界面的执行过程阻塞,即界面部分在请求数据的过程中必须等待数据加载完毕. JSON数据的获取步骤: 1.设置网络地址的字符串:NSString *URLString = @"http://www.baidu.com"; 2.创建URL:NSURL *URL = [NSURL URLWithString:URLString]; 3.创建请求:NSURLR

iOS经验1:自己写的网络数据请求 第三方框架 断点续传 上传下载

镔哥哥做项目,一般的数据请求不管他多复杂,只要自己写好了请求,那么调用永远是那么的简单,那么我介绍一下 一:需要用到第三方框架AFNetworking,直接写在工程pch头文件里就行因为经常用到它,这在网上随便下载就行,最好用cocopod来下载,这样什么都有了,cocopod是什么,我就不说,博客上面有介绍. 开始啦: 1:自定义网络请求DataRequestManager类专门管理网络用的 朋友们以下代码就可以直接复制来用了 .h文件 //  DataRequestManager.h // 

iOS进阶学习-网络之数据请求

注:文中出现的网站只做用例子,所以有些已经失效的网站,具体URL大家可以自己上网搜索相关资源. 一.HTTP和HTTPS协议 1.URL: URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式=协议://主机地址/路径 http://www.cnblogs.com/soley 协议:不同的协议,代表着不同的资源查找方式,资源传输方式 主机地址

iOS开发之网络编程--5、NSURLSessionUploadTask+NSURLSessionDataDelegate代理上传

前言:关于NSURLSession的主要内容快到尾声了,这里就讲讲文件上传.关于文件上传当然就要使用NSURLSessionUploadTask,这里直接讲解常用的会和代理NSURLSessionDataDelegate一起搭配实现文件上传功能.另外,下面使用的文件上传思路是和NSURLConnection中本人之前的随笔<iOS开发之网络编程--使用NSURLConnection实现文件上传>提到的上传思路是一样的,都是要将请求信息拼接起来,然后传入到请求里进行上传.这个拼接过程是必要的,但

iOS网络之数据请求

1. HTTP和HTTPS协议 1> URL URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式=协议://主机地址/路径 http://www.cnblogs.com/gfxxbk/ 协议:不同的协议,代表着不同的资源查找方式,资源传输方式 主机地址:存放资源的主机的IP地址(域名) 路径:资源在主机中的位置 2> HTTP协议的概念

网络之数据请求

1. HTTP和HTTPS协议 1> URL URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式=协议://主机地址/路径 http://www.cnblogs.com/gfxxbk/ 协议:不同的协议,代表着不同的资源查找方式,资源传输方式 主机地址:存放资源的主机的IP地址(域名) 路径:资源在主机中的位置 2> HTTP协议的概念

ios网络编程(一)之网络请求

小知识: 1, HTTP协议,Hyper Text Transfer Protocol(超?本传输协议)是?于从万维?服务器传送超?本到本地浏览器的传输协议,HTTP是 ?个应?层协议,由请求和响应构成,是?个标准的客户端服务器模型. 2,url,统?资源定位符,也被称为?址,因特?上标准的资源?址 url的符语法: 协议://授权/路径?查询 协议:ftp://(?件传输协议) http://(超?本传输协议) https://(安全超文本传输协议) file://(本地文件协议) 3,ios

揭开网络编程常见API的面纱【上】

Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作. 1.socket(family,type,protocol) 当我们在开发网络应用程序时,使用该系统调用来创建一个套接字.该API所做的工作如下所示: 该系统调用主要完成两个任务:“创建套接字”和“为套接字绑定文件句柄”. socket{}结构定义如下:  struct socket { socket_state       

网络编程、请求接口

### 方法一:urllib 模块 ### from urllib import request ---- python 自带模块(标准模块) ----- (不推荐使用) url = 'http://www.baidu.com' req = request.urlopen(url) ---- 打开一个 url print(req.read().decode()) ---- 读返回结果 fw = open('baidu.html','w',encoding='utf-8') fw.write(co