iOS开发网络篇—使用ASI框架进行文件下载

说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载。

一、简单介绍

代码示例:

 #import "YYViewController.h"
#import "ASIHTTPRequest.h" @interface YYViewController () @end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad];
} -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//下载服务器上的文件
[self download];
} #pragma mark-下载文件
-(void)download
{ //1.创建请求对象
NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"];
ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.添加请求参数(请求体中的参数)
[request setDataReceivedBlock:^(NSData *data) {
NSLog(@"%d",data.length);
}]; //3.异步发送网络请求
[request startAsynchronous];
} @end

代码说明:上面的代码从服务器上异步下载文件,每当接收到数据的时候就打印接收到的数据的长度。

打印结果如下:

注意:在实际的开发中不能这样去下载文件,因为他不断的拼接文件数据的操作是在内存中进行的,如果所下载文件的数据较大,那么将会直接导致内存爆掉。

二、实际开发中的使用

代码示例(演示2):

 #import "YYViewController.h"
#import "ASIHTTPRequest.h" @interface YYViewController () @end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad];
} -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//下载服务器上的文件
[self download1];
} #pragma mark-下载文件
//演示1
-(void)download
{ //1.创建请求对象
NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"];
ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.添加请求参数(请求体中的参数)
[request setDataReceivedBlock:^(NSData *data) {
NSLog(@"%d",data.length);
}]; //3.异步发送网络请求
[request startAsynchronous];
} //演示2
-(void)download1
{
//1.创建请求对象
NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"];
ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.设置下载文件保存的路径
NSString *cachepath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *filename=[cachepath stringByAppendingPathComponent:@"video.zip"];
request.downloadDestinationPath=filename;
NSLog(@"%@",filename); //3.发送网络请求(异步)
[request startAsynchronous]; //4.当下载完成后通知
[request setCompletionBlock:^{
NSLog(@"下载成功");
}];
} @end

下载成功:

代码说明:

在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可(参照上面的代码)。

(1)创建请求对象;

(2)设置下载文件保存的路径;

(3)发送下载文件的网络请求(异步)。

按照上面的几个步骤执行,程序会自动开启异步线程,一点一点的把数据写入到指定的文件路径,而且不论是下载多大的文件都不会占用大量的内存空间。

asi框架是基于底层的cfnoteworking的,性能很好。当然也可以设置block,或者是监听下载的进度。

下面介绍使用asi框架下载文件,如何监听下载的进度。

设置下载代理,注意不是控制器代理。

代码示例:

 #import "YYViewController.h"
#import "ASIHTTPRequest.h" @interface YYViewController ()<ASIProgressDelegate>
@property (weak, nonatomic) IBOutlet UIProgressView *progress;
@end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad];
} -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//下载服务器上的文件
[self download];
} #pragma mark-下载文件
-(void)download
{
//1.创建请求对象
NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"];
ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.设置下载文件保存的路径
NSString *cachepath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *filename=[cachepath stringByAppendingPathComponent:@"video.zip"];
request.downloadDestinationPath=filename;
NSLog(@"%@",filename); //3.设置下载进度的代理
request.downloadProgressDelegate=self.progress; //4.发送网络请求(异步)
[request startAsynchronous]; //5.下载完毕后通知
[request setCompletionBlock:^{
NSLog(@"文件已经下载完毕");
}];
} #pragma mark-监听下载进度的代理方法

asi的文件下载还有一个属性可以设置是否支持断点下载。

设置支持断点下载的代码如下:

request.allowResumeForFileDownloads=YES;

这样的话,比如一个文件已经下载了百分之30到程序的沙盒中,这个时候取消了下载。当下一次点击下载文件的时候,会接着下载剩余的百分之70并一点一点的写入到沙盒中。

提示:取消下载的代码为:

[request clearDelegatesAndCancel];

三,结合一些进度显示的第三方框架使用

去code4app上面随便下载一个显示下载进度的第三方框架,这里以DACircularProgressView为例子。

导入该框架必要的文件后,简单使用如下。

代码示例:

 #import "YYViewController.h"
#import "ASIHTTPRequest.h"
#import "DACircularProgressView.h" @interface YYViewController ()<ASIProgressDelegate> @property (weak, nonatomic) IBOutlet DACircularProgressView *circularView;
@property (weak, nonatomic) IBOutlet UIProgressView *progress;
@end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad]; //设置基本的一些属性
self.circularView.trackTintColor=[UIColor lightGrayColor];
self.circularView.progressTintColor=[UIColor yellowColor];
} -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//下载服务器上的文件
[self download];
} #pragma mark-下载文件
-(void)download
{
//1.创建请求对象
NSURL *url=[NSURL URLWithString:@"http://127.0.0.1:8080/MJServer/resources/video.zip"];
ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.设置下载文件保存的路径
NSString *cachepath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *filename=[cachepath stringByAppendingPathComponent:@"video.zip"];
request.downloadDestinationPath=filename;
NSLog(@"%@",filename); //3.设置下载进度的代理
request.downloadProgressDelegate=self.circularView; //4.发送网络请求(异步)
[request startAsynchronous]; //5.设置支持断点下载
request.allowResumeForFileDownloads=YES; //5.下载完毕后通知
[request setCompletionBlock:^{
NSLog(@"文件已经下载完毕");
}];
} #pragma mark-监听下载进度的代理方法
@end

显示效果:

特别提示:

iOS开发网络篇—使用ASI框架进行文件下载的更多相关文章

  1. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  2. iOS开发网络篇—HTTP协议

    iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  3. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  4. iOS开发网络篇—监测网络状态(转)

    文章转载自:http://www.cnblogs.com/wendingding/p/3950114.html iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时 ...

  5. iOS开发网络篇—NSURLConnection基本使用

    iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据 ...

  6. iOS开发网络篇—文件的上传

    iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...

  7. iOS开发网络篇—监测网络状态

    iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行 ...

  8. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  9. iOS开发网络篇—XML数据的解析

     iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...

随机推荐

  1. input内强制保留小数点后两位 位数不足时自动补0

    input内强制保留小数点后两位 位数不足时自动补0 小数点后位数超出2位时进行四舍五入 需引入jquery包 1.11.2版本 1 function xiaoshu(x) 2 { 3 var f = ...

  2. CentOS 命令模式下设置静态IP

    ASP.NET程序猿第一次修改IP,之前没有接触过Linux,有点伤不起... # cd /etc/sysconfig/network-scripts/ # ls  会看到 ifcfg-eth0 if ...

  3. Android MimeType的用法和几种类型

    关于MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII ...

  4. 机器学习实战-边学边读python代码(3)

    程序清单2-3 归一化特征值: def autoNorm(dataSet): /* >>> barray([[ 1., 2., 3.], [ 2., 3., 4.], [ 10., ...

  5. Intel+Ardruino 101 翻转时点灯

    /*  ===============================================  Example sketch for CurieIMU library for Intel(R ...

  6. dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)

    jsp的三个指令为:page,include,taglib... 建立一个jsp文件,建立起绝对路径,使用时,其他jsp文件导入即可 导入方法:<%@ include file="/c ...

  7. noi 9265 取数游戏

    题目链接:http://noi.openjudge.cn/ch0206/9265/ 题意:从自然数1到N中不取相邻2数地取走任意个数,问方案数. 解法:f[i][1]表示在前i个数中选了第i个的方案数 ...

  8. IntelliJ IDEA使用(2)——IDEA配置Tomcat

    如果网上流传的方法(即方法2)不能配置成功,点击加号什么都没有的话,请看方法一配置方法. 解决问题:intlellij IDEA配置tomcat点击加号没东西. 方法一:手动添加tomcat插件然后再 ...

  9. c++11中的for简化用法

    1.序列for循环 map<string,int> m{{"a",1},{"b",2},{"c",3}} for(auto p: ...

  10. <转>linux crontab 定时任务

    基本格式 : * * * * * command 分 时  日  月  周    命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 ...