iOS 简单的分段下载文件
首先自己写个请求数据的类
首先.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 简单的分段下载文件的更多相关文章
- 如何将IOS版本的更新下载文件指向到自己的服务器
针对那些使用企业签名但是没有发布到AppSotre的IOS版本APP自动更新问题解决方案: 在apicloud中是这样说明的: 因为要填写plist地址所以不能向安卓那样直接填写服务器文件地址,但是直 ...
- svn简单上传下载文件命令
上传命令: svn import 本地文件或目录 远程服务端目录 --username '用户名' --password '密码' -m '添加描述(可为空)' 下载命令: svn export 远程 ...
- Linux wget 命令下载文件
wget是Linux系统中用来下载文件的工具,其功能还是比较多的,能够下载单个文件,也可以分段下载,下面小编将针对wget命令的用法给大家做个实例介绍. 实例1 :下载单个文件 # wget http ...
- iOS开发网络篇—大文件的多线程断点下载
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...
- iOS开发网络请求——大文件的多线程断点下载
iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...
- extjs插件开发上传下载文件简单案例
前台,extjs,框架,mybatis,spring,springMVC,简单的文件上传下载案例. 必要的jar包,commons-fileupload-1.3.1.jar,commons-io-2. ...
- iOS开发网络篇—大文件的多线程断点下载(转)
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...
- [iOS 多线程 & 网络 - 2.10] - ASI框架下载文件
A.ASI框架中的下载 1.实现步骤 在实际的开发中如果要使用asi框架来下载服务器上的文件,只需要执行下面简单的几个步骤即可. (1)创建请求对象:(2)设置下载文件保存的路径:(3)发送下载文件的 ...
- secureCRT简单上传、下载文件记录
secureCRT简单上传.下载文件记录: 1)sz下载 -y 覆盖 2)rz上传 -y 覆盖 3)以上两个命令属于安装时包含在“Dial-up Networking Support"组中 ...
随机推荐
- phpcms开发过程中遇到的问题总结
1.Q:phpcms后台页面使用ajax会进不了控制器方法中 A:因为后台安全性比较高,需要进行hash验证,直接在浏览器输入ajax要访问的路径就会出现如下图的报错.所以后台页面尽可能用其他方法 ...
- Jquery父页面和子页面的相互操作
//父页面调用子页面Add函数 $("iframe")[0].contentWindow.Add() //父页面对子页面Id为Sava的Dom元素执行一次单击操作 $(" ...
- poj2388-Who's in the Middle(排序)
水题:求中位数. #include<iostream> #include<algorithm> using namespace std; int main(){ int n; ...
- HTML 播放器 写给自己
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 从程序员到CTO的Java技术路线图(我爱分享)
在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样我们清楚的知道我们大概处于那个阶段和水平. Java程序员 高级特性 反射.泛型. ...
- 数值分析之QR因子分解篇
在数值线性代数中,QR因子分解的思想比其他所有算法的思想更为重要[1]. --Lloyd N. Trefethen & ...
- 给Source Insight做个外挂系列之六--“TabSiPlus”的其它问题
关于如何做一个Source Insight外挂插件的全过程都已经写完了,这么一点东西拖了一年的时间才写完,足以说明我是一个很懒的人,如果不是很多朋友的关心和督促,恐怕是难以完成了.许多朋友希望顺着本文 ...
- 在mvc中将session的值绑定在页面上
第一步,在SqlServer数据库中创建存储过程,查询的是用户名(员工姓名)所扮演的角色: if exists(select * from sys.objects where name='proc_s ...
- linux系统文件权限
Linux文件权限详解 文件和目录权限概述 在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录.通过设定权限可以从以下三种访问方式限制访问权限:只允许 ...
- 【入门】 jpa--实体管理器的基本应用
1.新建Jpa项目 2.引入所需的jar 包 3.创建实体类 package com.watchfree.entity; import javax.persistence.Entity; import ...