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 ...
随机推荐
- web前端开发学习路径图
第一阶段 WEB前端工程师课程 HTML语句,HTML页面结构.css语法.style属性.link和style标签.id属性.等HTML语句中的相关属性: 通过Dreamweaver制作出跨越平台限 ...
- (copy) Top Ten Reasons not to use the C shell
http://www.grymoire.com/Unix/CshTop10.txt ========================================================== ...
- Issue 5:Hadoop博客系列转载
Alex 的 Hadoop 菜鸟教程: 第1课 hadoop体系介绍 Alex 的 Hadoop 菜鸟教程: 第2课 hadoop 安装教程 (CentOS6 CDH分支 yum方式) Alex 的 ...
- Hive:Spark中如何实现将rdd结果插入到hive1.3.0表中
DataFrame写入hive API: registerTempTable函数是创建spark临时表 insertInto函数是向表中写入数据,可以看出此函数不能指定数据库和分区等信息,不可以直接进 ...
- python pymysql和orm
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1. 安装 管理员打开cmd,切换到python的安装路径,进入到Scripts目录下(如:C:\Users\A ...
- Android moveTaskToBack(booleannon Root)
moveTaskToBack (booleannon Root)方法:在activity中调用此方法即可将activity 退到后台,注意不是finish()退出. 参数说明: 参数为false--代 ...
- android手机和ios手机的分辨率
Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3 VGA 640*480 (Video Graphics Array) QVGA 320*240 (Quarter VGA ...
- Bare Medal on BCM2835 and BCM2836
A few days ago, I have tried to write bare medal program but failed. Now I find that the main mistak ...
- 【转载】jQuery动画连续触发、滞后反复执行解决办法
转载: http://www.cnblogs.com/yuejin/archive/2012/12/18/2822595.html jQuery中slideUp .slideDown.animate等 ...
- try,catch,finally含return时的执行顺序及丢失的伪例
最近面试遇到一个之前也看到过但没去看一下的问题.就是有return情况下的try,catch,finally的执行顺序. 今天写了下. 先看顺序问题.总结如下: 一:finally中没有写return ...