首先自己写个请求数据的类

首先.h文件

#import <Foundation/Foundation.h>

@interface Downloaders : NSObject<NSURLConnectionDataDelegate>

@property (nonatomic, assign) long long beginpt;//下载的起始点

@property (nonatomic, assign) long long endpt;//下载的终点

@property(nonatomic,assign)long long currentLength;//下载的长度

@property(nonatomic,retain)NSString *url;

-(void)starts;

@end

.m文件

#import "Downloaders.h"

#import <Foundation/Foundation.h>

@implementation Downloaders

{

}

-(id)init

{

self = [super init];

if(self)

{

}

return self;

}

-(void)starts

{

[self startDown];

}

-(void)startDown

{

NSURL *urls =[NSURL URLWithString:self.url];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:urls];

NSString *value = [NSString stringWithFormat:@"bytes=%lld-%lld", self.beginpt + self.currentLength, self.endpt];

[request setValue:value forHTTPHeaderField:@"Range"];

[NSURLConnection connectionWithRequest:request delegate:self];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

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

NSString *fullpath = [path stringByAppendingPathComponent:@"tests.mp4"];

NSFileManager *fiels= [NSFileManager defaultManager];

if(![fiels fileExistsAtPath:fullpath])

{

[fiels createFileAtPath:fullpath contents:nil attributes:nil];

}

else

{

//  NSLog(@"fiel exsits......");

}

NSFileHandle *fielhandel = [NSFileHandle fileHandleForUpdatingAtPath:fullpath];

[ fielhandel seekToFileOffset:self.beginpt + self.currentLength ];

[fielhandel writeData:data];

self.currentLength += data.length;

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

self.currentLength = 0;

}

然后在需要的地方调用

#import "ViewController.h"

#import "Downloaders.h"

@interface ViewController ()

{

long long totallength;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self getfielsize];

long long sizes= 0;

sizes  = totallength/4+1;

for(int i=0;i<4;i++)

{

Downloaders *objc = [[Downloaders alloc]init];

objc.url = @"http://172.16.1.92:97/meadia/test.mp4";

objc.beginpt = i*sizes;

objc.endpt = objc.beginpt+sizes-1;

[objc starts];

}

// Do any additional setup after loading the view, typically from a nib.

}

-(void)getfielsize

{

NSString *str = @"http://172.16.1.92:97/meadia/test.mp4";

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:str]];

request.HTTPMethod=@"HEAD";

NSURLResponse *response = nil;

[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

totallength = response.expectedContentLength;

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

iOS 简单的分段下载文件的更多相关文章

  1. 如何将IOS版本的更新下载文件指向到自己的服务器

    针对那些使用企业签名但是没有发布到AppSotre的IOS版本APP自动更新问题解决方案: 在apicloud中是这样说明的: 因为要填写plist地址所以不能向安卓那样直接填写服务器文件地址,但是直 ...

  2. svn简单上传下载文件命令

    上传命令: svn import 本地文件或目录 远程服务端目录 --username '用户名' --password '密码' -m '添加描述(可为空)' 下载命令: svn export 远程 ...

  3. Linux wget 命令下载文件

    wget是Linux系统中用来下载文件的工具,其功能还是比较多的,能够下载单个文件,也可以分段下载,下面小编将针对wget命令的用法给大家做个实例介绍. 实例1 :下载单个文件 # wget http ...

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

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

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

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

  6. extjs插件开发上传下载文件简单案例

    前台,extjs,框架,mybatis,spring,springMVC,简单的文件上传下载案例. 必要的jar包,commons-fileupload-1.3.1.jar,commons-io-2. ...

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

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

  8. [iOS 多线程 & 网络 - 2.10] - ASI框架下载文件

    A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的 ...

  9. secureCRT简单上传、下载文件记录

    secureCRT简单上传.下载文件记录: 1)sz下载 -y 覆盖 2)rz上传 -y 覆盖 3)以上两个命令属于安装时包含在“Dial-up Networking Support"组中 ...

随机推荐

  1. Hibernate学习笔记5

    hql语句的查询(hibernate query language) hql和sql语句的区别sql:语言关系型数据库里面的通用查询,结构化查询语言,查看的是表以及表的列hql是hibernate中独 ...

  2. js中for in的用法

    for(var i=0;i<len;i++)这样的用法一般都可以用for in 来替代. 例如: var a = ["a","b","c&quo ...

  3. C# 内嵌其他程序到自己程序

    写一xxx聊天机器人啊什么的可能会用到这种技术.比如把QQ窗体嵌入自己的winform中其实很简单,调用两个API函数即可. [DllImport("User32.dll ", E ...

  4. char和byte的区别

    char的字符数据类型,是无符号型的,占2个字节:大小范围是0-65535: byte是字节数据类型,是有符号型的,占1个字节:大小范围为-128-127: 1, char c1=3; char c= ...

  5. WPF中UserControl和DataTemplate

    最新更新: http://denghejun.github.io 前言 前言总是留给我说一些无关主题的言论,WPF作为全新Microsoft桌面或web应用程序显示技术框架, 从08年开始,一直到现在 ...

  6. Graph cuts图论分割

    Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立体视觉(stereo vision).抠图(Image matt ...

  7. python 2.43 升级到2.7

    [root@GW1 bin]# lsb_release -aLSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3. ...

  8. js 滚动的文字(走马灯)

    // 滚动的文字 function marqueeScroll() { //var $target = $(".marquee_outer:visible"); if($(&quo ...

  9. robot创建桌面图标(转载)

    桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...

  10. Java Basic - Annotation

    使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器.      从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理.   注解处理器类库( ...