ios 实现简单的断点续传下载 nsurlconnection
2013-05-20 14:44
423 查看
转载自 :http://blog.csdn.net/sirchenhua/article/details/7286312?reload
NSUrlConnection实现断点续传的关键是自定义http request的头部的range域属性。
Range头域
Range头域可以请求实体的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。
在ios中使用NSMutableURLRequest来定义头部域
NSURL *url1=[NSURL URLWithString:@"下载地址";
NSMutableURLRequest* request1=[NSMutableURLRequest requestWithURL:url1];
[request1 setValue:@"bytes=20000-" forHTTPHeaderField:@"Range"];
[request1 setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
NSData *returnData1 = [NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil];
[self writeToFile:returnData1 fileName:@"SOMEPATH"];
-(void)writeToFile:(NSData *)data fileName:(NSString *) fileName
{
NSString *filePath=[NSString stringWithFormat:@"%@",fileName];
if([[NSFileManager defaultManager] fileExistsAtPath:filePath] == NO){
NSLog(@"file not exist,create it...");
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
}else {
NSLog(@"file exist!!!");
}
FILE *file = fopen([fileName UTF8String], [@"ab+" UTF8String]);
if(file != NULL){
fseek(file, 0, SEEK_END);
}
int readSize = [data length];
fwrite((const void *)[data bytes], readSize, 1, file);
fclose(file);
}
NSUrlConnection实现断点续传的关键是自定义http request的头部的range域属性。
Range头域
Range头域可以请求实体的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。
在ios中使用NSMutableURLRequest来定义头部域
NSURL *url1=[NSURL URLWithString:@"下载地址";
NSMutableURLRequest* request1=[NSMutableURLRequest requestWithURL:url1];
[request1 setValue:@"bytes=20000-" forHTTPHeaderField:@"Range"];
[request1 setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
NSData *returnData1 = [NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil];
[self writeToFile:returnData1 fileName:@"SOMEPATH"];
-(void)writeToFile:(NSData *)data fileName:(NSString *) fileName
{
NSString *filePath=[NSString stringWithFormat:@"%@",fileName];
if([[NSFileManager defaultManager] fileExistsAtPath:filePath] == NO){
NSLog(@"file not exist,create it...");
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
}else {
NSLog(@"file exist!!!");
}
FILE *file = fopen([fileName UTF8String], [@"ab+" UTF8String]);
if(file != NULL){
fseek(file, 0, SEEK_END);
}
int readSize = [data length];
fwrite((const void *)[data bytes], readSize, 1, file);
fclose(file);
}
相关文章推荐
- ios 实现简单的断点续传下载 nsurlconnection
- iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
- ios断点续传:通过NSURLSession实现文件下载功能
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
- IOS 下载文件断点续传原理与实现(附源码)
- Java servlet 简单实现http文件下载断点续传功能
- iOS开发-使用NSURLSession实现文件断点下载,文件离线续传以及图片上传
- IOS从客户端实现下载断点续传,可暂停可继续下载
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
- iOS- 利用AFNetworking(AFN) 1.1.0- 实现文件断点下载
- C#下载大文件并实现断点续传
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
- 文件下载之断点续传(客户端与服务端的实现)
- 在Android平台下通过HTTP协议实现断点续传下载。
- iOS开发-实现大文件下载与断点下载思路
- iOS开发网络编程之断点续传-NSURLConnection
- iOS网络中下载文件之断点续传
- Swift实现断点续传,Demo简单易懂,没有太多复杂模块和逻辑,完整体现断点续传的原理
- 使用NSURLConnection实现大文件断点下载