iOS ASI--文件下载

1.方法一:如果NSData数据很大,把很大的数据装进内存,内存肯定会爆掉,所以这种方法不可取

// 设置url

NSURL *url = [NSURL URLWithString:@"http://localhost/123.jpg"];

// 设置请求

self.request = [ASIHTTPRequest requestWithURL:url];

// 接收到服务器返回的数据

[self.request setDataReceivedBlock:^(NSData *data) {

NSLog(@"-----%d",data.length);

}];

// 发起请求

[self.request startAsynchronous];

2.方法二:

// 设置url

NSURL *url = [NSURL URLWithString:@"http://localhost/123.jpg"];

// 设置请求

self.request = [ASIHTTPRequest requestWithURL:url];

// 设置文件本地存放的路径

NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

NSString *cachePath = [cache stringByAppendingPathComponent:@"cache.db"];

[self.request setDownloadDestinationPath:cachePath];

// 下载完成时调用

[self.request setCompletionBlock:^{

NSLog(@"下载完咯,用ASI下载,就是这么轻轻松松搞定!");

}];

// 发起请求

[self.request startAsynchronous];

3. 监听下载的进度,先要遵守ASIProgressDelegate协议

// 设置url

NSURL *url = [NSURL URLWithString:@"http://localhost/123.jpg"];

// 设置请求

self.request = [ASIHTTPRequest requestWithURL:url];

// 设置文件本地存放的路径

NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

NSString *cachePath = [cache stringByAppendingPathComponent:@"cache.db"];

[self.request setDownloadDestinationPath:cachePath];

// 设置下载进度代理

  self.request.downloadProgressDelegate = self;

// 接收到服务器返回的数据

[self.request setCompletionBlock:^{

NSLog(@"下载完咯");

}];

// 发起请求

[self.request startAsynchronous];

}

#pragma mark - ASIProgressDelegate

- (void)setProgress:(float)newProgress{

NSLog(@"下载进度:%f",newProgress);

}

补充:如果能拿到进度条控件,监听下载进度还有一种写法

self.request.downloadProgressDelegate = self.progressView;

/*   代理方法可以省略不写,因为把self.progressView有progress属性,意味着progressView内部已经实现了progress的set方法,正好downloadProgressDelegate的代理方法就是setProgress: ,所以下面这段代码可以省略

- (void)setProgress:(float)newProgress{

self.progressView.progress = newProgress

}   */

4.支持断点续传   [self.request setAllowResumeForFileDownloads:YES];  把这句代码加上就OK了

原理:假设有个按钮,点击按钮执行这个方法 [self.request clearDelegatesAndCancel];然后ASI会把已经下载好的数据放到沙盒缓存,下次再下载时,会自动将新数据拼接到已下载好的旧数据上.

时间: 2024-12-22 10:02:40

iOS ASI--文件下载的相关文章

(转) IOS ASI http 框架详解

(转) IOS ASI http 框架详解 ASIHTTPRequest对CFNetwork API进行了封装,并且使用起来非常简单,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中.ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互. ASIHTTPRequest功能很强大,主要特色如下: l 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作 l 下载的数据,可存储到内存中或直接存储到磁盘中 l 能上传

【iOS】文件下载小记

文件的下载分为NSURLConnection与NSURLSession两种,前一种有恨悠久的历史了.使用相对麻烦,后者是新出来的,增加了一些额外的功能. 一.NSURLConnection实现下载 TIPS: 1.当NSURLConnection下载时,得到的NSData写入文件时,data并没有占用多大内存. (即使文件很大) 2.一点点在传. 做的是磁盘缓存.而不是内存缓存机制. 3.了解在NSURLConnection上加代理.[consetDelegateQueue:[[NSOperat

IOS ASI (第三方请求)

什么是ASI全称是ASIHTTPRequest,外号"HTTP终结者",功能十分强大基于底层的CFNetwork框架,运行效率很高可惜作者早已停止更新,有一些潜在的BUG无人去解决很多公司的旧项目里面都残留着它的身影,以前的很多iOS项目都是ASI + SBJson会不会用ASI,可以算是检验是否为老牌iOS程序员的标准之一 ASI的github地址https://github.com/pokeb/asi-http-request ASI的使用参考http://www.cnblogs.

IOS ASI和AFN的 区别

一.底层实现 1> AFN的底层基于OC的NSURLConnection和NSURLSession2> ASI的底层基于纯C语言的CFNetwork框架3> ASI的运行性能 高于 AFN 二.对服务器返回的数据处理 1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string2> AFN提供了多种对服务器数据处理的方式* JSON处理* XML处理* 其他处理 三.监听请求的过程 1> AFN提供了success和failure两个block来监听请

iOS 开发-文件下载原理

文件上传 创建文件上传类FileDownload.h // // FileDownload.h // 01.文件下载 // // Created by wyh on 15-1-29. // Copyright (c) 2015年 itcast. All rights reserved. // #import <Foundation/Foundation.h> @interface FileDownload : NSObject - (void)downloadFileWithURL:(NSUR

ios ASI 断点下载

ASI的断点下载技术非常的好用, 任何有下载功能的应用都可以试试: //1.创建请求对象 NSURL *url=[NSURL URLWithString:@"在这里输入你的下载链接"]; ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.设置下载文件保存的路径 NSString *cachepath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirecto

ios 多线程文件下载与上传, post数据

一.文件下载 获取资源文件大小有两张方式 1. [objc] view plaincopy HTTP HEAD方法 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:kTimeout]; request.HTTPMethod = @"HEAD"; [NSURLConnection sendAsynchronousRequest:requ

ios大文件下载封装

1 #import <Foundation/Foundation.h> 2 3 @interface HMFileDownloader : NSObject 4 /** 5 * 所需要下载文件的远程URL(连接服务器的路径) 6 */ 7 @property (nonatomic, copy) NSString *url; 8 /** 9 * 文件的存储路径(文件下载到什么地方) 10 */ 11 @property (nonatomic, copy) NSString *destPath;

iOS网络-文件下载,断点下载,输出流下载

小文件下载 NSURLConnection-delegate实现,可以监听到下载的进度,但是还是无法解决内存飙升的问题,所以仅限小文件下载 1 @interface ViewController ()<NSURLConnectionDataDelegate> 2 @property (weak, nonatomic) IBOutlet UIProgressView *progressView; 3 /** 接收数据的data */ 4 @property (nonatomic, strong)

移动开发经验分享1:IOS应用文件下载及打开

最近为在做一个企业信息化SOA项目,其中有一个子项目是给客户做一个移动办公系统系统(包括andriod版本和IOS版),使用的是jquery mobile+phonegap+html5.但当项目接近验收时,发现有一个附件下载及打开的功能在IOS上无法达到要求(在andriod上是使用的java实现的).项目验收在即,客户对这个功能也蛮重视必须在验收前完成.于是必须要在最短时间达到能够让用户正常使用的的前提下.我使用了如下方法: window.open(sourceurl,"_system&quo