欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS實(shí)現(xiàn)文件下載功能

 更新時(shí)間:2022年04月27日 09:31:19   作者:意華  
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)文件下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了iOS實(shí)現(xiàn)文件下載的具體代碼,供大家參考,具體內(nèi)容如下

說明:

1).獲取網(wǎng)絡(luò)文件大??;

2).開啟循環(huán),計(jì)算每段position開始與結(jié)束位置,通過Range頭字段按塊獲取文件數(shù)據(jù)流;

3).使用NSFileHandle追加方式將NSData文件數(shù)據(jù)寫入本地文件。

1、用HEAD請(qǐng)求方式獲取網(wǎng)絡(luò)文件大小:

/*
?獲取網(wǎng)絡(luò)文件大小
?*/
- (long long)getNetFileLen:(NSURL *)url{
? ? //1.創(chuàng)建request
? ? NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:10];
? ? //設(shè)置請(qǐng)求方式為HEAD, 只獲取頭信息
? ? request.HTTPMethod = @"HEAD";
? ??
? ? //2.定義用于接收網(wǎng)絡(luò)數(shù)據(jù)的對(duì)象
? ? NSURLResponse *response = nil;
? ??
? ? //3.同步請(qǐng)求網(wǎng)絡(luò),將結(jié)果存入response
? ? [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
? ??
? ? //返回文件大小
? ? return response.expectedContentLength;
}

2、開啟異步線程,請(qǐng)求網(wǎng)絡(luò)下載文件:

/*
?下載文件
?*/
- (void)downloadFile:(NSString *)urlStr done:(void (^)())done{
? ??
? ? //1.獲取系統(tǒng)自帶全局隊(duì)列
? ? //并行隊(duì)列,多個(gè)線程并發(fā)執(zhí)行:DISPATCH_QUEUE_PRIORITY_DEFAULT
? ? dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
? ??
? ? //2.異步執(zhí)行
? ? dispatch_async(queue, ^{
? ? ? ? //創(chuàng)建url對(duì)象
? ? ? ? NSURL *url = [[NSURL alloc] initWithString:urlStr];
? ? ? ? NSLog(@"url: %@", urlStr);
? ? ? ??
? ? ? ? //獲取本地已下載文件大小
? ? ? ? long long localFileLen = [self getLocalFileLen];
? ? ? ? NSLog(@"localFileLen : %lld", localFileLen);
? ? ? ??
? ? ? ? //獲取網(wǎng)絡(luò)文件大小
? ? ? ? long long netFileLen = [self getNetFileLen:url];
? ? ? ? NSLog(@"netFileLen : %lld", netFileLen);
? ? ? ??
? ? ? ? if(localFileLen == netFileLen){//一樣表示存在了
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ??
? ? ? ? //每次從服務(wù)端獲取的文件數(shù)據(jù)大小
? ? ? ? long long itemSize = 1024 * 20;
? ? ? ??
? ? ? ? //一段數(shù)據(jù)的開始position位置
? ? ? ? long long startPos = 0;
? ? ? ??
? ? ? ? //一段數(shù)據(jù)的結(jié)尾position位置
? ? ? ? long long endPos = 0;
? ? ? ??
? ? ? ? while (startPos < netFileLen) {
? ? ? ? ? ? //計(jì)算結(jié)尾position
? ? ? ? ? ? endPos = startPos + itemSize - 1;
? ? ? ? ? ??
? ? ? ? ? ? //組裝range字段,用于請(qǐng)求頭
? ? ? ? ? ? NSString *range = [NSString stringWithFormat:@"Bytes=%lld-%lld", startPos, endPos];
? ? ? ? ? ??
? ? ? ? ? ? NSLog(@"range : %@", range);
? ? ? ? ? ??
? ? ? ? ? ? //重新計(jì)算下一段數(shù)據(jù)開始position
? ? ? ? ? ? startPos = startPos + itemSize;
? ? ? ? ? ??
? ? ? ? ? ? /*
? ? ? ? ? ? ?緩存策略
? ? ? ? ? ? ?NSURLRequestUseProtocolCachePolicy = 0, 默認(rèn),內(nèi)存緩存
? ? ? ? ? ? ?NSURLRequestReloadIgnoringLocalCacheData = 1, 忽略本地內(nèi)存緩存
? ? ? ? ? ? ?NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
? ? ? ? ? ? ?NSURLRequestReturnCacheDataElseLoad = 2,
? ? ? ? ? ? ?NSURLRequestReturnCacheDataDontLoad = 3,
? ? ? ? ? ? ?*/
? ? ? ? ? ??
? ? ? ? ? ? //(1)創(chuàng)建request
? ? ? ? ? ? NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
? ? ? ? ? ??
? ? ? ? ? ? //設(shè)置Range請(qǐng)求頭
? ? ? ? ? ? [request setValue:range forHTTPHeaderField:@"Range"];
? ? ? ? ? ??
? ? ? ? ? ? //(2)定義用于接收網(wǎng)絡(luò)信息的對(duì)象
? ? ? ? ? ? NSURLResponse *response = nil;
? ? ? ? ? ??
? ? ? ? ? ? //(3)同步請(qǐng)求網(wǎng)絡(luò)
? ? ? ? ? ? NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
? ? ? ? ? ??
? ? ? ? ? ? //(4)將數(shù)據(jù)寫入文件
? ? ? ? ? ? [self appendFile:data];
? ? ? ? }
? ? ? ??
? ? ? ? //3.切回主線程
? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? //調(diào)用完成方法
? ? ? ? ? ? done();
? ? ? ? });
? ? ? ??
? ? });
}

3、獲取本地文件大?。?/strong>

/*
?獲取本地文件大小
?*/
- (long long)getLocalFileLen{
? ? //目錄路徑
? ? NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
? ? //文件路徑
? ? NSString *filePath = [cacheDir stringByAppendingPathComponent:@"qq.dmg"];
? ? //獲取本地文件NSDictionary信息
? ? NSDictionary *map = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:NULL];
? ? //獲取本地文件大小,轉(zhuǎn)為longlong類型
? ? return [map[NSFileSize] longLongValue];
}

4、將NSData數(shù)據(jù)追加寫入文件:

/*
?將NSData數(shù)據(jù)追加寫入文件
?*/
- (void)appendFile:(NSData *)data{
? ? //目錄路徑
? ? NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
? ? //文件路徑
? ? NSString *filePath = [cacheDir stringByAppendingPathComponent:@"qq.dmg"];
? ??
? ? NSLog(@"filePath : %@", filePath);
? ??
? ? //創(chuàng)建文件操作類,NSFileHandle支持追加寫入方式
? ? NSFileHandle *file = [NSFileHandle fileHandleForWritingAtPath:filePath];
? ??
? ? if(!file){//文件不存在時(shí),直接覆蓋方式寫入
? ? ? ? [data writeToFile:filePath atomically:YES];
? ? ? ? return;
? ? }
? ? //跳到文件末尾
? ? [file seekToEndOfFile];
? ??
? ? //寫數(shù)據(jù)
? ? [file writeData:data];
? ??
? ? //關(guān)閉文件流
? ? [file closeFile];
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IOS開發(fā)壓縮后圖片模糊問題解決

    IOS開發(fā)壓縮后圖片模糊問題解決

    這篇文章主要為大家介紹了IOS開發(fā)壓縮后圖片模糊問題解決實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • MobPush for Flutter集成準(zhǔn)備

    MobPush for Flutter集成準(zhǔn)備

    這篇文章主要為大家介紹了MobPush for Flutter集成準(zhǔn)備實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • iOS開發(fā)實(shí)現(xiàn)隨機(jī)圖片驗(yàn)證碼封裝

    iOS開發(fā)實(shí)現(xiàn)隨機(jī)圖片驗(yàn)證碼封裝

    這篇文章主要介紹了iOS開發(fā)實(shí)現(xiàn)隨機(jī)圖片驗(yàn)證碼封裝,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • IOS-MVC層讀取服務(wù)器接口JSON數(shù)據(jù)

    IOS-MVC層讀取服務(wù)器接口JSON數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了IOS-MVC層讀取服務(wù)器接口JSON數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 詳解ios中scrollView上使用masonry

    詳解ios中scrollView上使用masonry

    本篇文章主要給大家詳細(xì)分析了ios開發(fā)中scrollView上使用masonry的詳細(xì)知識(shí)內(nèi)容,需要的朋友參考下吧。
    2018-02-02
  • iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無cpu暴漲)

    iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無cpu暴漲)

    本篇文章主要介紹了iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無cpu暴漲),具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • iOS之UIWebView無法獲取web標(biāo)題的解決方法

    iOS之UIWebView無法獲取web標(biāo)題的解決方法

    這篇文章主要為大家詳細(xì)介紹了iOS之UIWebView無法獲取web標(biāo)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • iOS 引導(dǎo)頁(yè)的鏤空效果實(shí)例

    iOS 引導(dǎo)頁(yè)的鏤空效果實(shí)例

    這篇文章主要介紹了iOS 引導(dǎo)頁(yè)的鏤空效果實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • iOS高仿微信相冊(cè)界面翻轉(zhuǎn)過渡動(dòng)畫效果

    iOS高仿微信相冊(cè)界面翻轉(zhuǎn)過渡動(dòng)畫效果

    在圖片界面點(diǎn)擊右下角的查看評(píng)論會(huì)翻轉(zhuǎn)到評(píng)論界面,評(píng)論界面點(diǎn)擊左上角的返回按鈕會(huì)反方向翻轉(zhuǎn)回圖片界面,真正的實(shí)現(xiàn)方法,與傳統(tǒng)的導(dǎo)航欄過渡其實(shí)只有一行代碼的區(qū)別,下面小編通過本文給大家介紹下ios高仿微信相冊(cè)界面翻轉(zhuǎn)過渡動(dòng)畫效果,一起看看吧
    2016-11-11
  • IOS添加自定義字體實(shí)例詳解

    IOS添加自定義字體實(shí)例詳解

    這篇文章主要介紹了IOS添加自定義字體實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論