NSURLSession之下載

1:首先就是下載圖片

NSURLSessionConfiguration * config=[NSURLSessionConfiguration defaultSessionConfiguration];

//創(chuàng)建一個session

NSURLSession * session=[NSURLSession sessionWithConfiguration:config];

NSURL * url =[NSURL URLWithString:urlString];

//創(chuàng)建一個任務(wù)請求到data數(shù)據(jù)然后將其轉(zhuǎn)化成圖片

NSURLSessionDataTask * dataTask=[session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

self.imageView.image=[UIImage imageWithData:data];

}];

[dataTask resume];

2:主要談一下一些比較大的文件的下載

其實有很多第三方庫集成的很好,用法就不多說了,這里主要用系統(tǒng)自帶的URLSession進(jìn)行文件的下載

1:首先我們需要遵循NSURLSessionDownloadDelegate代理,因為要用到其代理方法獲取當(dāng)前進(jìn)度以及結(jié)束等狀態(tài)

2接著我們根據(jù)網(wǎng)址創(chuàng)建一個NSURL,然后創(chuàng)建Session的配置信息,接著就是創(chuàng)建Session,遵循其代理,然后執(zhí)行下載任務(wù)。

-(void)loadFileWithUrl:(NSString *)str

{

NSURL * url =[NSURL URLWithString:str];

NSURLSessionConfiguration * config =[NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession *session= [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];

NSURLSessionDownloadTask* downloadTask = [session downloadTaskWithURL:url];

[downloadTask resume];

}

3:其實主要處理還是在代理方法中

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{

}

這是結(jié)束的代理方法,這里主要處理下載結(jié)束后我們要進(jìn)行的操作

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask ? ?didWriteData:(int64_t)bytesWritten ? ? totalBytesWritten (int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite

{

self.myPregress.progress = (double)totalBytesWritten/totalBytesExpectedToWrite;

self.pgLabel.text = [NSString stringWithFormat:@"下載進(jìn)度:%f",(double)totalBytesWritten/totalBytesExpectedToWrite];

}

這個是程序正在下載的代理方法,我們可以從其中獲取到當(dāng)前的進(jìn)度

參數(shù)*? @param bytesWritten? ? ? ? ? ? ? 這次寫入的大小

*? @param totalBytesWritten? ? ? ? 已經(jīng)寫入沙盒的大小

*? @param totalBytesExpectedToWrite 文件總大小

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask

didResumeAtOffset:(int64_t)fileOffset

expectedTotalBytes:(int64_t)expectedTotalBytes

{

}這個就是當(dāng)前的下載任務(wù)暫停后回復(fù)下載后調(diào)用的方法

3:下載的暫?;貜?fù)

1:暫停

__weak typeof(self) selfVc = self;

[self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {

//? resumeData : 包含了繼續(xù)下載的開始位置\下載的url

selfVc.resumeData = resumeData;

selfVc.downloadTask = nil;

}];

主要就是將當(dāng)前已經(jīng)下載的resumeData存儲下來,然后將downloadTask置為nil

2:回復(fù)

// 傳入上次暫停下載返回的數(shù)據(jù),就可以恢復(fù)下載

self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];

[self.downloadTask resume]; // 開始任務(wù)

self.resumeData = nil;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容