iOS 開發之 NSURLSession 下載和斷點續傳
NSURLSession是iOS7之後新的網路介面,和經常用到NSURLConnection是類似的。在程式在前臺時,NSURLSession與NSURLConnection可以相互的替代。但是當使用者在對程式進行強制關閉的時候此時NSURLSession會預設的自動斷開。相比而言NSURLSession的優勢主要體現在後臺操作時候,而且在最流行的框架AFNetworking中也對NSURLSession提供了更好的支援。
主要提供的功能如下:
1 下載檔案到記憶體中
2 下載檔案到路徑
3 上傳制定的檔案等
案例演示:圖片下載斷點續傳
主要程式碼:
1、定義幾個全域性變數
@interface ViewController () { NSURLSessionDownloadTask * _task; NSData * _data; NSURLSession * _session; NSURLRequest * _request; UIProgressView * _pro; UIImageView * _imageView; }
2、向檢視中新增圖片進度條
_imageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)]; _imageView.center=self.view.center; [self.view addSubview:_imageView]; _pro=[[UIProgressView alloc] initWithFrame:CGRectMake(_imageView.frame.origin.x, _imageView.frame.origin.y+400, 300, 40)];
3、向檢視中新增按鈕(同樣的方式新增三個)
UIButton * button=[[UIButton alloc] initWithFrame:CGRectMake(50, _imageView.frame.origin.y+400+20, 50, 40)]; button.backgroundColor=[UIColor blueColor]; [button setTitle:@"開始" forState:UIControlStateNormal]; [button addTarget:self action:@selector(ddLoad) forControlEvents:UIControlEventTouchUpInside]; button.layer.borderWidth=1; button.layer.borderColor=[UIColor blueColor].CGColor; button.layer.cornerRadius=5; [self.view addSubview:button];
4、通過AFNetworkReachabilityManager網路狀態監測
- (void) _checkNet{ //開啟網路狀態監控 [[AFNetworkReachabilityManager sharedManager] startMonitoring]; [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { if(status==AFNetworkReachabilityStatusReachableViaWiFi){ NSLog(@"當前是wifi"); } if(status==AFNetworkReachabilityStatusReachableViaWWAN){ NSLog(@"當前是3G"); } if(status==AFNetworkReachabilityStatusNotReachable){ NSLog(@"當前是沒有網路"); } if(status==AFNetworkReachabilityStatusUnknown){ NSLog(@"當前是未知網路"); } }]; }
5、開始下載
- (void) ddLoad{ NSURLSessionConfiguration * config=[NSURLSessionConfiguration defaultSessionConfiguration]; _session=[NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; // NSURL *url=[NSURL URLWithString:@src]; _request=[NSURLRequest requestWithURL:url]; _task= [_session downloadTaskWithRequest:_request]; NSLog(@"開始載入"); [_task resume]; }
6、設定暫停和回覆
- (void) pause{ //暫停 NSLog(@"暫停下載"); [_task cancelByProducingResumeData:^(NSData *resumeData) { _data=resumeData; }]; _task=nil; } - (void) resume{ //恢復 NSLog(@"恢復下載"); if(!_data){ NSURL *url=[NSURL URLWithString:@src]; _request=[NSURLRequest requestWithURL:url]; _task=[_session downloadTaskWithRequest:_request]; }else{ _task=[_session downloadTaskWithResumeData:_data]; } [_task resume]; }
7、代理方法儲存下載檔案監控下載進度
#pragma mark - delegate - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{ NSURL * url=[NSURL fileURLWithPath:@"/Users/jredu/Desktop/tt.png"]; NSFileManager * manager=[NSFileManager defaultManager]; [manager moveItemAtURL:location toURL:url error:nil]; dispatch_async(dispatch_get_main_queue(), ^{ NSData * data=[manager contentsAtPath:@"/Users/jredu/Desktop/tt.png"]; UIImage * image=[[UIImage alloc ]initWithData:data]; _imageView.image=image; UIAlertView * alert=[[UIAlertView alloc] initWithTitle:nil message:@"下載完成" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; }) ; } - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{ CGFloat progress=(totalBytesWritten*1.0)/totalBytesExpectedToWrite; dispatch_async(dispatch_get_main_queue(), ^{ _pro.progress=progress; }) ; }
相關文章
- Android斷點續傳下載器JarvisDownloaderAndroid斷點JAR
- 使用curl斷點續傳下載檔案斷點
- Android下載檔案(一)下載進度&斷點續傳Android斷點
- Android 中 Service+Notification 斷點續傳下載Android斷點
- 上傳——斷點續傳之實踐篇斷點
- 檔案下載之斷點續傳(客戶端與服務端的實現)斷點客戶端服務端
- 斷點續傳瞭解一下啊?斷點
- OSS網頁上傳和斷點續傳(STSToken篇)網頁斷點
- requests如何友好地請求下載大檔案?requests實現分段下載、斷點續傳斷點
- OSS網頁上傳和斷點續傳(OSS配置篇)網頁斷點
- OSS網頁上傳和斷點續傳(終結篇)網頁斷點
- Android原生下載(上篇)基本邏輯+斷點續傳Android斷點
- iOS開發 - Xcode不走斷點iOSXCode斷點
- 斷點續傳教學例子斷點
- 上傳——斷點續傳之理論篇斷點
- 使用NSOperation和NSURLSession封裝一個序列下載器Session封裝
- Java多執行緒下載器FileDownloader(支援斷點續傳、代理等功能)Java執行緒斷點
- iOS開發·網路請求大總結(NSURLConnection,NSURLSession,AFNetworking)iOSSession
- Linux如何遠端複製,限速和斷點續傳Linux斷點
- 12. 斷點續傳的原理斷點
- scp實現斷點續傳---rsync斷點
- Free Download Manager for Mac多點續傳下載工具Mac
- vue+element+oss實現前端分片上傳和斷點續傳Vue前端斷點
- 檔案上傳下載攻略,斷點續傳等等那些事兒,滿滿乾貨(react&node)斷點React
- 關於http斷點續傳那點事HTTP斷點
- Range/Content-Range與斷點續傳,瞭解一下?斷點
- Android多執行緒+單執行緒+斷點續傳+進度條顯示下載Android執行緒斷點
- Java實現檔案斷點續傳Java斷點
- 大檔案上傳、斷點續傳、秒傳、beego、vue斷點GoVue
- 1. 大檔案上傳如何斷點續傳斷點
- 圖解:HTTP 範圍請求,助力斷點續傳、多執行緒下載的核心原理圖解HTTP斷點執行緒
- VUE-多檔案斷點續傳、秒傳、分片上傳Vue斷點
- JAVA編寫的斷點續傳小程式Java斷點
- 使用Visual C#實現斷點續傳C#斷點
- C#如何使用HttpClient對大檔案進行斷點上傳和下載C#HTTPclient斷點
- PyTorch儲存模型斷點以及載入斷點繼續訓練PyTorch模型斷點
- JAVA實現大檔案分片上傳斷點續傳Java斷點
- 支援斷點續傳的大檔案傳輸協議斷點協議
- Android中的多執行緒斷點續傳Android執行緒斷點