[iOS 多线程 & 网络 - 2.10] - ASI框架下载文件

A.ASI框架中的下载

1.实现步骤

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

(1)创建请求对象;
(2)设置下载文件保存的路径;
(3)发送下载文件的网络请求(异步)。
按照上面的几个步骤执行,程序会自动开启异步线程,一点一点的把数据写入到指定的文件路径,而且不论是下载多大的文件都不会占用大量的内存空间。

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

自动会使用“边下边写”

使用进度代理方法获取下载进度  setProgress

 1 //
 2 //  ViewController.m
 3 //  ASIDownloadDemo
 4 //
 5 //  Created by hellovoidworld on 15/1/28.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10 #import "ASIHTTPRequest.h"
11
12 @interface ViewController ()
13
14 @property(nonatomic, strong) ASIHTTPRequest *request;
15
16 @property (weak, nonatomic) IBOutlet UIProgressView *progressView;
17
18 - (IBAction)startDownloading;
19
20 @end
21
22 @implementation ViewController
23
24 - (void)viewDidLoad {
25     [super viewDidLoad];
26     // Do any additional setup after loading the view, typically from a nib.
27 }
28
29 - (void)dealloc {
30     [self.request clearDelegatesAndCancel];
31     self.request = nil;
32 }
33
34 - (IBAction)startDownloading {
35     // 1.创建请求
36     NSURL *url = [NSURL URLWithString:@"http://192.168.0.21:8080/MyTestServer/images/images.zip"];
37     self.request = [ASIHTTPRequest requestWithURL:url];
38
39     // 2.设置文件存放路径
40     NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
41     NSString *filePath = [cachePath stringByAppendingPathComponent:@"images.zip"];
42     self.request.downloadDestinationPath = filePath;
43
44     // 3.设置下载代理
45     // 由于刚好下载代理方法有个setProgress,可以直接使用progressView的setProgress,直接控制进度条
46     self.request.downloadProgressDelegate = self.progressView;
47
48     // 4.支持断点下载
49     self.request.allowResumeForFileDownloads = YES;
50
51     self.request.completionBlock = ^{
52         NSLog(@"下载完成!");
53     };
54
55     // 5.发送请求
56     [self.request startAsynchronous];
57 }
58
59 #pragma mark - ASIProgressDelegate
60 /** 下载进度代理方法 */
61 //- (void)setProgress:(float)newProgress {
62 //    self.progressView.progress = newProgress;
63 //}
64
65 @end

2.断点下载

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

设置支持断点下载的代码如下:
request.allowResumeForFileDownloads=YES;
这样的话,比如一个文件已经下载了百分之30到程序的沙盒中,这个时候取消了下载。当下一次点击下载文件的时候,会接着下载剩余的百分之70并一点一点的写入到沙盒中。
提示:取消下载的代码为:

[request clearDelegatesAndCancel];

时间: 2024-10-20 04:21:32

[iOS 多线程 & 网络 - 2.10] - ASI框架下载文件的相关文章

[iOS 多线程 & 网络 - 2.9] - ASI框架

A.ASI基本知识 1.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高. ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html http://www.oschina.net/question

[iOS 多线程 & 网络 - 2.11] - ASI框架上传文件

A.ASI的上传功能基本使用 1.实现步骤 (1)创建请求 使用ASIFormDataRequest (2)设置上传文件路径 (3)发送请求 2.上传相册相片 UIImagePickerController用来选择图片 设置图片来源,可以选择相册 使用代理 UIImagePickerControllerDelegate方法,选择完成之后取得相片 1 // 2 // ViewController.m 3 // ASIUploadDemo 4 // 5 // Created by hellovoid

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

原文  http://www.cnblogs.com/wendingding/p/3961681.html iOS开发网络篇—使用ASI框架进行文件下载 说明 :本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController () 5 6 7 @

iOS 多线程 & 网络 - 4.0 - AFN框架简单使用

A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC B.基本请求使用 1.基本使用 (1)头文件 AFNetworking.h (2)管理者类:AFHTTPRequestOperationManager (3)“GET”方法发送GET请求,使用“POST”方法发送POST请求 (4)使用字典发送参数 (5)block处理请求成功/失败 1 /** 发送 GET/

iOS开发网络篇—文件下载(五·下载功能的封装)

iOS开发网络篇—文件下载(五·下载功能的封装) 一.简单说明 在前面几篇文章介绍下载代码的基础上,此文分析对下载功能进行封装. 通过之前的代码,我们发现仅仅是下载一个文件就需要写很长的代码,那么如果要下载多个文件,就需要写多份代码.在这里,我们把下载一个文件的代码进行封装.控制器只需要知道,下载哪个文件,下载到哪个路径就可以了. 在对下载的功能进行封装后,添加一个文件下载器,一个文件下载器只下载一个文件,封装后如果要下载多个文件的话,那么只需要创建多个文件下载器对象就可以进行控制和下载了. 二

[iOS 多线程 & 网络 - 2.0] - 发送接收 服务器信息

A.搭建java服务器 使用eclipse.tomcat和struts2框架搭建一个简单的服务器 1.准备好合适版本的JDK.eclipse EE.tomcat.struts2 框架包 2.配置JDK和tomcat系统变量 3.在eclipse中创建一个Dynamic Web Project, 勾选创建web.xml 4.解压一个struts2中的app范例,参考其中的web.xml和struts.xml配置 5.配置tomcat,注意配置正确的服务器的路径和发布路径,不要使用默认的eclips

[iOS 多线程 & 网络 - 1.0] - 多线程概述

A.进程 什么是进程进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活动监视器"可以查看Mac系统中所开启的进程 B.线程 主线程.子线程占用内存分别是1M和512K 1.什么是线程1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中

ios开发网络学习四:NSURLConnection大文件断点下载

#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @property (nonatomic, assign) NSInteger totalSize; @property (nonatomic, assign) NSInte

网络传输速度bps与下载文件所需时间的换算

相信很多同志都非常关注自己家的计算机上网的宽带是多少.关心单位上网的宽带是多少! 但是很多同志都经常误解网络传输速度,以至于责备网络接入商(电信.网通.铁通等单位)欺骗用户,限制上网的速度! 本文,就给您详细介绍一下带宽中提到的bps与下载文件所需时间的换算! 先看下图! 这是我个人上网的宽带,注意拉,速度是"100.0Mbps": 到这里,俺想试问一个问题,以这样的速度,假设处于理想状态,那么,我下载100MB的文件,需要多少时间呢? 如果您回答,需要1秒钟,那么,您就错了,并且是完