总结iOS开发中的断点续传与实践

2020-01-15 16:41:33丽君
URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite: 实现即可。

代码如清单 4 所示:

清单 4. NSURLSessionDownloadTask 的实现


 //SWIFT 

 //UI 触发 pause 
 func pause(){ 
  self.downloadTask?.cancelByProducingResumeData({data -> Void in 
    if data != nil { 
 data!.writeToFile(FileManager.instance.cacheFilePath(self.fileName!), 
 atomically: false) 
 } 
    }) 
  self.downloadTask = nil 
 } 

 // MARK: - NSURLSessionDownloadDelegate 
 func URLSession(session: NSURLSession, downloadTask: 
 NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, 
 totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { 
  if (self.downloadProgressHandler != nil) { 
    self.downloadProgressHandler(bytes: Int(bytesWritten), 
     totalBytes: totalBytesWritten, totalBytesExpected: totalBytesExpectedToWrite) 
  } 
 } 

 func URLSession(session: NSURLSession, task: NSURLSessionTask, 
 didCompleteWithError error: NSError?) { 
  if error != nil {//real error 
    self.failureHandler(error:error!) 
  } 
 } 

 func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, 
 didFinishDownloadingToURL location: NSURL) { 
  let cacheFilePath = FileManager.instance.cacheFilePath(self.fileName!) 
  let documenFilePath = FileManager.instance.documentFilePath(self.fileName!) 
  do { 
    if FileManager.instance.fileExistsAtPath(cacheFilePath){ 
      try FileManager.instance.removeItemAtPath(cacheFilePath) 
    } 
    try FileManager.instance.moveItemAtPath(location.path!, toPath: documenFilePath) 
  } catch let e as NSError { 
    print("Error occurred when to move file: (e)") 
  } 
  self.successHandler(responseObject:documenFilePath) 
 }

实现效果如图 10 所示:

图 10. NSURLSessionDownloadTask 演示

ios开发断点续传,ios断点续传,ios断点续传原理

总结

以上就是本文总结iOS开发中的断点续传与实践的全部内容,其实,下载的实现远不止这些内容,本文只介绍了简单的使用。希望在进一步的学习和应用中能继续与大家分享。希望本文能帮助到有需要的大家。


注:相关教程知识阅读请移步到IOS开发频道。