您的位置:首页 > 移动开发 > IOS开发

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);  
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: