//
// 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 断点下载的更多相关文章

  1. iOS 大文件断点下载

    iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NS ...

  2. iOS开发——网络篇——NSURLSession,下载、上传代理方法,利用NSURLSession断点下载,AFN基本使用,网络检测,NSURLConnection补充

    一.NSURLConnection补充 前面提到的NSURLConnection有些知识点需要补充 NSURLConnectionDataDelegate的代理方法有一下几个 - (void)conn ...

  3. iOS开发网络篇—大文件的多线程断点下载

    http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...

  4. iOS开发网络请求——大文件的多线程断点下载

    iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...

  5. iOS开发网络篇—大文件的多线程断点下载(转)

    http://www.cnblogs.com/wendingding/p/3947550.html   iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...

  6. iOS开发网络篇—多线程断点下载

    iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...

  7. ios网络 -- HTTP请求 and 文件下载/断点下载

    一:请求 http://www.jianshu.com/p/8a90aa6bad6b 二:下载 iOS网络--『文件下载.断点下载』的实现(一):NSURLConnection http://www. ...

  8. iOS开发-大文件下载与断点下载思路

    大文件下载方案一:利用NSURLConnection和它的代理方法,及NSFileHandle(iOS9后不建议使用)相关变量: @property (nonatomic,strong) NSFile ...

  9. iOS开发 -------- AFNetworking实现简单的断点下载

    一 实现如下效果   二 实现代码 // // ViewController.m // AFNetworking实现断点下载 // // Created by lovestarfish on 15/1 ...

随机推荐

  1. web前端开发学习路径图

    第一阶段 WEB前端工程师课程 HTML语句,HTML页面结构.css语法.style属性.link和style标签.id属性.等HTML语句中的相关属性: 通过Dreamweaver制作出跨越平台限 ...

  2. Python模拟实现Linux系统unix2dos功能

    目标 1.Linux系统与windows系统文件系统换行符问题 2.实现unix文件转换成dos文件格式 1.Linux系统与windows系统文件系统换行符 •关于回车|换行的来历 在计算机还没有出 ...

  3. centos7作为web服务器优化

    centos7作为web服务器优化 原文 http://itindex.net/detail/51140-centos7-web-服务器 1.加大打开文件数的限制(open files) 查看 uli ...

  4. 罗永浩专访全文记录(转自好奇心日报-http://www.qdaily.com/)

    这篇文章是转的,存档做记录,定期看一看,激励自己遇到到困难时,想想人家比自己难多了,自己那点事算个屁啊.学习别人,不要带有傻逼主观倾向性,这样什么也得不到,我看完后,发现有一句话,说的非常好,自己有自 ...

  5. Windows Server 2008 任务计划无法自动运行的解决办法

    问题:编写的bat脚本,直接执行,成功:但是在任务管理器中配置该任务,运行不成功,结果显示为:0x1,系统环境为 Windows Server 2008. 分析:bat任务没有调用执行. 解决方案: ...

  6. Art-template模板

    1.介绍 新一代 javascript 模板引擎. 2.性能(引) 1.性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍(性能测试) 2.支持运行时调试,可精确定位异常模板所在 ...

  7. My family No.1

    Ok, in my family, there are seven people including my father, mother, three sisters, one brother and ...

  8. php 无限极

      1,递归 public function getInfo(){ $data=$this->select(); $arr=$this->noLimit($data,$f_id=0,$le ...

  9. No compiler is provided in this environment. Perhaps you are running on a JRE ra

    No compiler is provided in this environment. Perhaps you are running on a JRE ra,有需要的朋友可以参考下. 控制台输出的 ...

  10. MapReduce 简介

    2. MapReduce 简介 MapReduce 实际上是分为两个过程 map 过程 : 数据的读取 reduce 过程 : 数据的计算 并行计算是一个非常复杂的过程, mapreduce是一个并行 ...