一、创建网络请求队列

首先,创建网络请求队列,如下:

ASINetworkQueue   *que = [[ASINetworkQueue alloc] init];

self.netWorkQueue = que;

[que release];

[self.netWorkQueue reset];

[self.netWorkQueue setShowAccurateProgress:YES];

[self.netWorkQueue go];

二、创建存放路径

//初始化Documents路径

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

//初始化临时文件路径

NSString *folderPath = [path stringByAppendingPathComponent:@"temp"];

//创建文件管理器

NSFileManager *fileManager = [NSFileManager defaultManager];

//判断temp文件夹是否存在

BOOL fileExists = [fileManager fileExistsAtPath:folderPath];

if (!fileExists) {//如果不存在说创建,因为下载时,不会自动创建文件夹

[fileManager createDirectoryAtPath:folderPath

withIntermediateDirectories:YES

attributes:nil

error:nil];

}

三、发送下载请求

这里对下面几个对象说明一下:CustomCell是我自定义的cell,cell上面有下载和暂停两个按钮,其tag值为cell所在的行,因此这里的[sendertag]为下载按钮的tag值,self.downloadArray为array数组对象,存放要下载的资源字典信息,在该字典中有一键为URL,它对应的值就是我们下载链接。

这些东西,根据自己的实际需要改动一下即可使用

CustomCell *cell = (CustomCell *)[self.myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[sender tag] inSection:0]];

NSString  *filePath = [[self.downloadArray objectAtIndex:[sender tag]] objectForKey:@"URL"];

NSLog(@"filePath=%@",filePath);

//初始下载路径

NSURL *url = [NSURL URLWithString:filePath];

//设置下载路径

ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];

//设置ASIHTTPRequest代理

request.delegate = self;

//初始化保存ZIP文件路径

NSString *savePath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"book_%d.zip",[sender tag]]];

//初始化临时文件路径

NSString *tempPath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"temp/book_%d.zip.temp",[sender tag]]];

//设置文件保存路径

[request setDownloadDestinationPath:savePath];

//设置临时文件路径

[request setTemporaryFileDownloadPath:tempPath];

//设置进度条的代理,

[request setDownloadProgressDelegate:cell];

//设置是是否支持断点下载

[request setAllowResumeForFileDownloads:YES];

//设置基本信息

[request setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[sender tag]],@"bookID",nil]];

NSLog(@"UserInfo=%@",request.userInfo);

//添加到ASINetworkQueue队列去下载

[self.netWorkQueue addOperation:request];

//收回request

[request release];

三、暂停请求

这里的cell下下载时的一样,

CustomCell *cell = (CustomCell *)[self.myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[sender tag] inSection:0]];

for (ASIHTTPRequest *request in [self.netWorkQueue operations]) {

NSInteger bookid = [[request.userInfo objectForKey:@"bookID"] intValue];//查看userinfo信息

if ([sender tag] == bookid) {//判断ID是否匹配

//暂停匹配对象

[request clearDelegatesAndCancel];

}

}

四、ASIHTTPRequestDelegate回调方法

上面已经把下载请求与暂停请求实现,点击下载时,开始下载资源;当点暂停时,下载中断;当我们再点击下载按钮时,继续下载,在第二步的

[request setAllowResumeForFileDownloads:YES]设置是是否支持断点下载。下面要实现ASIHTTPRequestDelegate代理方法如下:

#pragma mark -

#pragma mark ASIHTTPRequestDelegate method

//ASIHTTPRequestDelegate,下载之前获取信息的方法,主要获取下载内容的大小,可以显示下载进度多少字节

- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders {

NSLog(@"didReceiveResponseHeaders-%@",[responseHeaders valueForKey:@"Content-Length"]);

NSLog(@"contentlength=%f",request.contentLength/1024.0/1024.0);

int bookid = [[request.userInfo objectForKey:@"bookID"] intValue];

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

float tempConLen = [[userDefaults objectForKey:[NSString stringWithFormat:@"book_%d_contentLength",bookid]] floatValue];

NSLog(@"tempConLen=%f",tempConLen);

//如果没有保存,则持久化他的内容大小

if (tempConLen == 0 ) {//如果没有保存,则持久化他的内容大小

[userDefaults setObject:[NSNumber numberWithFloat:request.contentLength/1024.0/1024.0] forKey:[NSString stringWithFormat:@"book_%d_contentLength",bookid]];

}

}

//ASIHTTPRequestDelegate,下载完成时,执行的方法

- (void)requestFinished:(ASIHTTPRequest *)request {

int bookid = [[request.userInfo objectForKey:@"bookID"] intValue];

CustomCell *cell = (CustomCell *)[self.myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:bookid inSection:0]];

cell.downloadCompleteStatus = YES;

cell.progressView.progress = 0.0;

}

经过上述步骤,一个支持断点续传的功能程序实现了!

ASIHTTPRequest下载示例(支持断点续传)的更多相关文章

  1. Spring Boot Ftp Client 客户端示例支持断点续传

    本章介绍 Spring Boot 整合 Ftpclient 的示例,支持断点续传 本项目源码下载 1 新建 Spring Boot Maven 示例工程项目 注意:是用来 IDEA 开发工具 File ...

  2. 打印 上一主题 下一主题 利用cURL实现单个文件分多段同时下载,支持断点续传(修订版)

      利用cURL实现单个文件分多段同时下载,支持断点续传(修订版) [复制链接] 摘自 http://bbs.chinaunix.net/thread-917952-1-1.html 在ubuntu下 ...

  3. C# http下载(支持断点续传)

    分享下项目里面自己封装的一个http下载类 功能如下: 1.支持断点续传 2.下载失败自动重试 3.超时等异常处理 using System; using System.Collections.Gen ...

  4. C# FTP上传下载(支持断点续传)

    <pre class="csharp" name="code"><pre class="csharp" name=&quo ...

  5. Java实现多线程下载,支持断点续传

    完整代码:https://github.com/iyuanyb/Downloader 多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内 ...

  6. c#上传下载ftp(支持断点续传)

    using System;using System.Net;using System.IO;using System.Text;using System.Net.Sockets;namespace f ...

  7. 【FTP】FTP文件上传下载-支持断点续传

    Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...

  8. php实现的支持断点续传的文件下载类

    通常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现. HTTP断点续传原理: Http头 Range.Content-Range()HTTP头中一般断点下载时 ...

  9. php 支持断点续传的文件下载类

    php 支持断点续传的文件下载类 分类: php class2013-06-30 17:27 17748人阅读 评论(6) 收藏 举报 php断点续传下载http测试 php 支持断点续传,主要依靠H ...

随机推荐

  1. .net 直接输出远程文件到浏览器和下载文件保存到本机

    利用了xmlhttp,实现代码比较简单具体实现如下: 首先bin文件引入,com->microsoft xml v3.0 具体代码如下: protected void Button1_Click ...

  2. java项目常用 BaseDao BaseService

    java项目常用 BaseDao BaseService IBaseDao 1 package com.glht.sim.dao; 2 3  import java.util.List; 4 5 6 ...

  3. js弹出对话框的方法总结

    九种js弹出对话框的方法总结,需要的朋友可以参考一下 [1.最基本的js弹出对话框窗口代码] 这是最基本的js弹出对话框,其实代码就几句非常简单: <script LANGUAGE=" ...

  4. Web Servic和Web API的区别

    Web Service:1.它是基于SOAP协议的,数据格式是XML2.只支持HTTP协议3.它不是开源的,但可以被任意一个了解XML的人使用4.它只能部署在IIS上Web API:1.这是一个简单的 ...

  5. 配置jsp开发环境

    一.安装jdk(http://pan.baidu.com/s/1sjk9a2p) 二.配置java环境变量 安装好后,配置环境变量:计算机——右击——属性——高级系统设置设置——环境变量 系统变量(没 ...

  6. 解决”不按住fun键输入的是数字,按着fun键才能输入字母”

    原来联想的“FN+NUMLK“键组合,是进行数字和字符区域的切换的. 如果当前输入的是数字,说明当前处于数字模式,按一次“FN+NUMLK“键组合即可切换到字母模式.这样就能够正常地输入字母了.

  7. Linux下的PostgreSQL简单安装手册

    1. 安装环境     linux版本: CentOS release 6.2 (Final)     pg版本    : postgresql-9.5.0   2. pg数据库下载地址 --http ...

  8. transient

    “transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号.或者这么给他换个名字——“不可序列化状态”.打个比方,如果一个用户有一些 ...

  9. Java 输入输出流 转载

    转载自:http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所 ...

  10. runtime运行机制方法学习

    runtime这玩意第一次听说时都不知道是什么,经过了解后才知道它就是oc动态语言的机制,没有它那oc就不能称为动态语言.在之前可能大家对runtime了解都不深,随着编程技能的日益加深和需要,大家开 ...