IOS 断点下载
//
// ViewController.m
// UI4_断点下载
//
// Created by qianfeng on 15/8/19.
// Copyright (c) 2015年 ZBC. All rights reserved.
// #import "ViewController.h" @interface ViewController ()<NSURLConnectionDelegate,NSURLConnectionDataDelegate>
{
NSURL *_url;
NSURLConnection *_connection;
//文件读写
NSFileHandle *_fileHandle;
//下载文件保存路径
NSString *_filePath;
//文件真实大小
long long _expectSize; //已经下载的大小
long long _readSize;
}
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. _url=[NSURL URLWithString:[@"http://192.168.84.188/新版上线流程整理.pdf" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];//解码
NSLog(@"%@",NSHomeDirectory()); NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
_expectSize=[[defaults objectForKey:@"xpectsize"] longLongValue];
if (_expectSize) {
_filePath=[NSHomeDirectory() stringByAppendingString:@"/Library/Caches/新版上线流程整理.pdf"];
_fileHandle=[NSFileHandle fileHandleForUpdatingAtPath:_filePath];
_readSize=[_fileHandle readDataToEndOfFile].length; CGFloat ratio=1.0*_readSize/_expectSize;
_progressLabel.text=[NSString stringWithFormat:@"%.2f%%",ratio*];
_progressView.progress=ratio;
}
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)startBtn:(UIButton *)sender {
if ([sender.titleLabel.text isEqualToString:@"开始下载"]) {
[sender setTitle:@"暂停" forState:UIControlStateNormal]; NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:_url];
NSString *range=[NSString stringWithFormat:@"bytes=%lld-",_readSize];
[request setValue:range forHTTPHeaderField:@"Range"];
_connection=[[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:_url] delegate:self];
}
else
{
[sender setTitle:@"开始下载" forState:UIControlStateNormal];
[_connection cancel];
} } #pragma mark---下载协议
//下载错误
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"%@",error.localizedDescription);
} //接收到数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//获取到 下载的大小
_readSize+=data.length; //一直追加
[_fileHandle seekToEndOfFile];
[_fileHandle writeData:data]; CGFloat ratio=1.0*_readSize/_expectSize;
_progressLabel.text=[NSString stringWithFormat:@"%.2f%%",ratio*];
_progressView.progress=ratio;
}
//接收到响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"%lld",_expectSize);
if (!_expectSize) {
_filePath=[NSHomeDirectory() stringByAppendingString:@"/Library/Caches/新版上线流程整理.pdf"];
NSLog(@"%@",_filePath);
_expectSize=response.expectedContentLength; NSFileManager *manager=[NSFileManager defaultManager];
if (![manager fileExistsAtPath:_filePath]) {
[manager createFileAtPath:_filePath contents:nil attributes:nil];
} _fileHandle=[NSFileHandle fileHandleForUpdatingAtPath:_filePath]; NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaults setObject:@(_expectSize) forKey:@"xpectsize"];
[defaults synchronize];
} }
//下载完成
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"下载完成");
[_fileHandle closeFile];
} @end
IOS 断点下载的更多相关文章
- iOS 大文件断点下载
iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NS ...
- iOS开发——网络篇——NSURLSession,下载、上传代理方法,利用NSURLSession断点下载,AFN基本使用,网络检测,NSURLConnection补充
一.NSURLConnection补充 前面提到的NSURLConnection有些知识点需要补充 NSURLConnectionDataDelegate的代理方法有一下几个 - (void)conn ...
- iOS开发网络篇—大文件的多线程断点下载
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...
- iOS开发网络请求——大文件的多线程断点下载
iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...
- iOS开发网络篇—大文件的多线程断点下载(转)
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...
- iOS开发网络篇—多线程断点下载
iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...
- ios网络 -- HTTP请求 and 文件下载/断点下载
一:请求 http://www.jianshu.com/p/8a90aa6bad6b 二:下载 iOS网络--『文件下载.断点下载』的实现(一):NSURLConnection http://www. ...
- iOS开发-大文件下载与断点下载思路
大文件下载方案一:利用NSURLConnection和它的代理方法,及NSFileHandle(iOS9后不建议使用)相关变量: @property (nonatomic,strong) NSFile ...
- iOS开发 -------- AFNetworking实现简单的断点下载
一 实现如下效果 二 实现代码 // // ViewController.m // AFNetworking实现断点下载 // // Created by lovestarfish on 15/1 ...
随机推荐
- css3几个新属性
1.text-shadow 文字阴影 p{ text-shadow:2px 2px 10px #000; } 四个参数,依次: a:水平偏移 b:垂直偏移 c:阴影程度 d:阴影颜色 2.word- ...
- 磁盘io的那些事
1.使用hdparm命令 hdparm -Tt /dev/sda /dev/sda: Timing cached reads: 6676 MB in 2.00 seconds = 3340.18 M ...
- xtrabackup备份rds记录
在执行最后一步时 mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mys ...
- windows10搭建django1.10.3+Apache2.4
很多教程都是在linux上搭建,windows上似乎天生不太适合,但是我还是愿意试试这个坑. 首先 交代一下自己的环境 python3.5.2 64位 django 1.10.3 apache 2.4 ...
- ubuntu16.04部署RED5流媒体服务器
前提:jdk已经安装 1,下载RED5(https://github.com/Red5/red5-server/releases)选择red5-server-X.X.X-MXX.tar.gz 2,解压 ...
- 判断访问的是移动端还是PC端,如果是移动端跳转页面
<script type="text/javascript"> var mobileAgent = new Array("iphone", &quo ...
- HDU 1880 魔咒词典(字符串哈希)
题目链接 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一 ...
- android studio 项目迁移编码问题
关于编码问题.首先,eclipse上一般我们文件默认都设置成UTF-.对于迁移到Android Studio显示不存在乱码问题. 部分同学可能会遇到一个问题:代码中的中文(包括注释的中文),在编译时跳 ...
- iBatis框架batch处理优化 (转)
为什么要做batch处理 这个问题我就不解释了,因为我想你们肯定能比我解释的更好!如果你真的不知道,那就到Google上去搜索一下吧☻Oracle回滚段 这个问题偶也不很明白,只是 ...
- Android开发新手学习总结(六)——android开发目录结构【图文版】
转载链接:http://bbs.itcast.cn/thread-87059-1-1.html?rss 既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最 ...