ASI使用介绍(文件下载)

本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。

前两节,我介绍了ASI的“同步与异步”及“文件上传”的知识,如有什么疑问的,请点击这里。这一节通过一个简单的例子,介绍一下通过ASI实现文件的下载。

界面很简单,"Start": 开始下载; “Stop”: 暂停下载; 支持断点续传。



1.要定义一个request成员属性,对ASI的request对象进行强引用。

@property(nonatomic,strong)  ASIHTTPRequest *request;


2.实现代理ASIProgressDelegate,用来显示进度条的进度。


3. 在dealloc方法中,要对ASI的request对象进行销毁工作。

// 当发出一个请求,也许5秒之后才有响应,没有等到响应回来的时候你就切换了控制器,则产生了野指针!!! 所以一定要在控制器销毁的时候调用下面代码!!
- (void)dealloc {
    [self.request clearDelegatesAndCancel];
}

4. start 与 stop方法如下。

- (IBAction)start {
    [self downloadFile];
}

- (IBAction)stop {
    [self.request clearDelegatesAndCancel];
}

5. 实现下载功能的主要方法。

- (void)downloadFile {
    // 1. 创建请求对象(我使用的测试链接,是下载的搜狗输入法)
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/link?url=bvCTezSVwkMRVbM2cQ5ntfsumx3AhZOEVzpe6EfbneMN8GFmkhC0BfXkoq1Sfus9v-wW19U37IvbEkdO5dWvRYeakTk0uPtTBzz6Xa5gF_y"];
    self.request = [ASIHTTPRequest requestWithURL:url];
    
    // 2. 文件保存路径
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    
    // 下载完毕后正式的文件
    NSString *filePath = [caches stringByAppendingPathComponent:@"sougou.zip"];
    self.request.downloadDestinationPath = filePath;
    
    // 临时下载文件,用来支持断点续传。续传成功会自动生成sougou.zip
    NSString *tempFilePath = [caches stringByAppendingPathComponent:@"sougou.temp.zip"];
    self.request.temporaryFileDownloadPath = tempFilePath;
    
    // 3. 设置下载进度代理
    // 用self.progressView作为代理,因为UIProgressView本身就有setProgress方法,相当于也实现了setProgress的代理方法。就能直接看到progressView的显示进度了,一举两得.
    self.request.downloadProgressDelegate = self.progressView;
    
    //self.request.downloadProgressDelegate = self;
    
    // 4. 请求超时控制
    self.request.timeOutSeconds = 10;
    
    // 5. 支持断点续传
    self.request.allowResumeForFileDownloads = YES;
    
    [self.request startAsynchronous];
}

对代码中,进度条控制的代码进行解释:它其实利用了代理的setProgress方法与进度条本身的progress属性同名的特点。
self.request.downloadProgressDelegate = self.progressView;

上面一句代码其实等价于

self.request.downloadProgressDelegate = self;
- (void)setProgress:(float)newProgress {
   // NSLog(@"Thread:%@",[NSThread currentThread]);
    self.progressView.progress = newProgress;
}

到此为止,ASI部分的使用介绍就已经完毕了。下一节,我将介绍AFN的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋恨雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值