iOS开发——实现大文件下载与断点下载思路

  


  

  

<强>方案一:强利用NSURLConnection和它的代理方法,及NSFileHandle (iOS9后不建议使用)
  

  

相关变量:
  

        @ property(原子、强)NSFileHandle * writeHandle;   @ property(原子,分配)很久totalLength;之前      

1的在发送请求
  

     //创建一个请求   NSURL * url=[NSURL URLWithString: @ ");   NSURLRequest *请求=[NSURLRequest requestWithURL: url];//使用NSURLConnection发起一个异步请求   (NSURLConnection connectionWithRequest:请求委托:自我);   之前      

2祝辞;在代理方法中处理服务器返回的数据
  

     /* *在接收到服务器的响应时调用下面这个代理方法   1 .创建一个空文件   2 .用一个句柄对象关联这个空文件,目的是方便在空文件后面写入数据   */- (void)连接:(NSURLConnection *)连接didReceiveResponse: (null NSURLResponse *)反应   {//创建文件路径   NSString *缓存=[NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask,是的)lastObject];   NSString * filePath=[缓存stringByAppendingPathComponent: @“videos.zip”);//创建一个空的文件到沙盒中   NSFileManager * mgr_home_dir_t=[NSFileManager defaultManager];   [下createFileAtPath: filePath内容:nil属性:nil);//创建一个用来写数据的文件句柄   自我。writeHandle=[NSFileHandle fileHandleForWritingAtPath filePath):;//获得文件的总大小   自我。totalLength=response.expectedContentLength;   }/* *在接收到服务器返回的文件数据时调用下面这个代理方法   利用句柄对象往文件的最后面追加数据   */- (void)连接:连接(NSURLConnection *) didReceiveData: (null NSData *)数据   {//移动到文件的最后面   (自我。writeHandle seekToEndOfFile];//将数据写入沙盒   (自我。writeHandle writeData:数据);   }/* *   在所有数据接收完毕时,关闭句柄对象   */- (void) connectionDidFinishLoading: (NSURLConnection *)连接   {//关闭文件并清空   (自我。writeHandle closeFile];   自我。writeHandle=零;   }      之前      

<强>方案二:使用NSURLSession的NSURLSessionDownloadTask和NSFileManager
  

        NSURLSession *会话=[NSURLSession sharedSession];   NSURL * url=[NSURL URLWithString: @ ");//可以用来下载大文件,数据将会存在沙盒里的tmp文件夹   NSURLSessionDownloadTask *任务=[会话downloadTaskWithURL: url completionHandler: ^ (NSURL * _Nullable位置,NSURLResponse * _Nullable响应,NSError * _Nullable错误){//位置:临时文件存放的路径(下载好的文件)//创建存储文件路径   NSString *缓存=[NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask,是的)lastObject];//response.suggestedFilename:建议使用的文件名,一般跟服务器端的文件名一致   NSString *文件=[缓存stringByAppendingPathComponent response.suggestedFilename):;/* *将临时文件剪切或者复制到缓存文件夹   AtPath:剪切前的文件路径   toPath:剪切后的文件路径   */NSFileManager * mgr_home_dir_t=[NSFileManager defaultManager];   【下moveItemAtPath:位置。路径toPath:文件错误:nil);   });   (任务的简历);之前      

<强>方案三:使用NSURLSessionDownloadDelegate的代理方法和NSFileManger
  

        - (void) touchesBegan:(NSSetiOS开发——实现大文件下载与断点下载思路