文档章节

IOS 文件下载之断点续传

小鸡蹲蘑菇
 小鸡蹲蘑菇
发布于 2015/05/20 10:41
字数 352
阅读 21
收藏 0

//
//  ViewController.m
//  DownLoadBig
//
//  Created by apple on 15/5/5.
//  Copyright (c) 2015年 apple. All rights reserved.
//
#import "ViewController.h"
#import "CircularProgressView/CircleProgressView.h"
#import "CircularProgressView/CircleShapeLayer.h"
@interface ViewController () <NSURLConnectionDataDelegate,UIAlertViewDelegate>
@property (weak, nonatomic) IBOutlet UIProgressView *proView;
@property (nonatomic,strong) NSMutableData *fileData;
@property (nonatomic,assign) long long total;
@property (nonatomic,strong) UIAlertView *alert;
@property (nonatomic,strong) NSFileHandle *wHandle;
@property (nonatomic,assign) long long currentLength;
@property (nonatomic,strong) NSString *urlstr;
@property (nonatomic,strong) CircleProgressView *cproView;
@property (weak, nonatomic) IBOutlet UIButton *downLoad;
@property (nonatomic,strong) NSURLConnection *conn;
@end
@implementation ViewController
- (IBAction)download:(id)sender {
    _downLoad.selected = !_downLoad.isSelected;
    if (_downLoad.selected){
        NSURL *url = [NSURL URLWithString:self.urlstr];
        
//        NSURLRequest *req = [NSURLRequest requestWithURL:url];
        NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
        NSString *range = [NSString stringWithFormat:@"bytes=%lld-",self.currentLength];
//        [req setValue:range forKey:@"Range"];
        [req setValue:range forHTTPHeaderField:@"Range"];
        
        self.conn = [NSURLConnection connectionWithRequest:req delegate:self];
    }
    else
    {
        [self.conn cancel];
        self.conn = nil;
        
    }
}
- (NSString *)urlstr
{
    if (_urlstr == nil){
        _urlstr = @"http://125.39.68.200/files/2011000000F9723B/xiazai.888rj.com/Soft/T/Thunder_7.9.26.4824_XiaZaiBa.exe";
    }
    return _urlstr;
}
-(NSMutableData *)fileData
{
    
    if (_fileData == nil){
        
        _fileData = [NSMutableData data];
    }
    return _fileData;
}
- (void)viewDidLoad {
    [super viewDidLoad];
//    self.proView.progress = 0.0;
    self.proView.progress = 0;
   
    
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    if (self.currentLength) return;
    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
//    NSLog(@"jieshou");
//    NSLog(@"%@%",res.allHeaderFields[@"Content-Length"]);
//     self.total= res.allHeaderFields[@"Content-Length"];
    
    self.total = res.expectedContentLength;
    
    NSString *AppName =  [[self.urlstr componentsSeparatedByString:@"/"] lastObject];
    NSString *cachestr = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [cachestr stringByAppendingPathComponent:AppName];
    NSFileManager *mgr = [NSFileManager defaultManager];
    
    [mgr createFileAtPath:filePath contents:nil attributes:nil];
    self.wHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
    
    
    
    
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    
//    [self.fileData appendData:data];
    [self.wHandle seekToEndOfFile];// 寻找文件的末尾偏移量
    [self.wHandle writeData:data];
    self.currentLength += data.length;
    
    self.proView.progress = (double)self.currentLength  / self.total;
    NSLog(@"%lld",self.currentLength);
    
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    
  
//    [self.fileData writeToFile:filePath atomically:YES];
//    /Users/apple/Library/Developer/CoreSimulator/Devices/612DC518-63EA-4614-AA42-30CAECF2B57B/data/Containers/Data/Application/77095FDC-6D9B-4BB6-AC5F-460EB80DBD22/Library/Caches
    long long totalMB = (self.total /1024/1024);
    
    NSString *totalstr = [ NSString stringWithFormat:@"软件总大小:%lldMB",totalMB];
    self.alert = [[UIAlertView alloc]  initWithTitle:@"下载完成" message:totalstr delegate:self cancelButtonTitle:@"ok"  otherButtonTitles: nil ];
    
    [self.alert show];
    
}
@end

© 著作权归作者所有

小鸡蹲蘑菇
粉丝 5
博文 68
码字总数 24144
作品 0
海淀
私信 提问
iOS基础深入补完计划--NSURLSession使用详解(附Demo)

目录 前言 API Demo 前言 本文主要是把NSURLSession以及NSURLSessionTask相关的代理方法全部整理了一下。 旨在大体了解在一个iOS网络请求中、一个任务究竟经理了什么。 而我们、又能做些什么...

kirito_song
2018/05/10
0
0
iOS 开发中音频队列播放音频

2012-07-17 19:59:24| 分类: ios|字号 订阅 第一部分 用 到了AudioToolbox这个音频接口,总结下,希望对需要的朋友有帮助。AudioToolbox这个库是C的接口,偏向于底层,用于在线流媒体音 乐的...

andyhe91
2013/06/15
4.5K
1
(转)ASIHTTPRequest类库简介和使用说明

官方网站: http://allseeing-i.com/ASIHTTPRequest/ 。 可以从上面下载到最新源码,以及获取到相关的资料。 使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一...

ioser
2011/06/24
501
0
【最佳实践】OSS移动端断点下载简单实现

概要 技术点 最佳实践 改进 参考 概要 所谓断点下载,其实是客户端在从网络上下载资源时,由于某种原因中断下载。再次开启下载时可以从已经下载的部分开始继续下载未完成的部分,从而节省时间...

sdlcdhch
2018/08/29
0
0
Unity3D 游戏引擎之构建游戏框架与导出IOS项目(一)

Unity3D游戏引擎之构建游戏框架与导出IOS项目 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6862563 首先先去Unity3D...

彭博
2012/03/09
893
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
219
9
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
2
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部