亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS-文件斷點續傳

2019-11-14 18:18:45
字體:
來源:轉載
供稿:網友

* 移動客戶端在和服務器交互的時候,上傳和下載使用十分廣泛。

* 在我們下載文件的時候,我們在點擊暫停的時候可以暫停下載,點擊下載的時候可以繼續下載,這個功能如何實現?

* 下載進度條如何顯示?

先大概敘述一下斷點下載的原理:

* 首先先判斷要判斷要下載的文件在本地沙盒中是否存在。

* 如果存在的話,要判斷下載文件的長度。

* 假設文件長度是500,我們發起下載請求的時候應該從500開始。

* 點擊暫停下載,應該將鏈接斷掉。

* 再次點擊下載的時候,根據下載文件長度,繼續下載。

下面與代碼結合起來敘述具體的實現:

* 假設我們要下載的文件在服務器的路徑為:http://localhost:8080:down/xcode_6.dmg;

* 我們將要下載的文件方法本地沙盒中。文件命名為:xcode.dmg.

* 獲取文件保存路徑的代碼:(折疊)

1 -(NSString *)getFilePath2 {3     NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];4     NSString *filePath = [documentsPath stringByAppendingPathComponent:@"xcode.dmg"];5     return filePath;6 }
下載文件保存路徑

* 因為下載的文件比較大,我們需要采取異步請求網絡。

* 異步請求網絡常用的有四個代理方法。

* 發起網絡請求下載。(下載起始點為上次暫停點,判斷上次暫停位置方法是,獲取文件屬性,從屬性中可以查看文件長度,請求點為該長度后面的內容)

* 假設向獲取某個字節的內容,可以使用:

 

    //bytes = 0-499 請求前500個字節的內容

 

    //bytes = 500- 請求500字節之后的內容

 

    //bytes = 500-1000 請求資源中某一范圍的內容

 

    //bytes = 0-1,499-500 請求多個范圍之間的內容

* 進度條過去文件下載進度,可以使用已經下載的文件的字節數/文件的總字節數。

下面為具體的代碼段,里面有詳細的注釋:

 

#import <UIKit/UIKit.h>@interface ViewController : UIViewController<NSURLConnectionDataDelegate>{    //進度條變量,顯示文件下載進度    IBOutlet UiprogressView *_PRogress;    //文件處理,將下載的文件寫入本地沙盒    NSFileHandle *_fileHandle;    //url連接,點解暫停,取消連接,點擊下載,開始下載    NSURLConnection *_connection;    //已經接收數據大小    long long _receiveSize;    //文件總共的大小    long long _totalSize;}//下載按鈕點擊響應函數- (IBAction)download:(id)sender;//暫停按鈕點擊響應函數- (IBAction)pause:(id)sender;@end

 

 

- (IBAction)download:(id)sender{    //文件的路徑    NSString *string = @"http://localhost:8080/down/xcode_6.dmg";    //文件的路徑轉化為url    NSURL *url = [NSURL URLWithString:string];    //創建可變請求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    //判斷沙盒路徑下有沒有這個文件,YES表示這個文件已經下載,NO表示還沒有下載    if ([[NSFileManager defaultManager] fileExistsAtPath:[self getFilePath]] == YES)    {                //根據文件的屬性,獲取之前下載數據量是多少        NSDictionary *fileDic = [[NSFileManager defaultManager]attributesOfItemAtPath:[self getFilePath] error:nil];        //文件的長度就是已經下載的數據量        _receiveSize = [fileDic[NSFileSize] longLongValue];        //設置Range,從Range之后的內容開始下載        //bytes = 0-499 請求前500個字節的內容        //bytes = 500- 請求500字節之后的內容        //bytes = 500-1000 請求資源中某一范圍的內容        //bytes = 0-1,499-500 請求多個范圍之間的內容        NSString *bytes = [NSString stringWithFormat:@"bytes=%lld-",_receiveSize];        [request setValue:bytes forHTTPHeaderField:@"Range"];            }    //發起異步請求,文件比較法,使用異步請求    _connection = [NSURLConnection connectionWithRequest:request delegate:self];}- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    //分析響應頭    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;    //獲取響應頭,是一個字典    NSDictionary *responseHeader = httpResponse.allHeaderFields;    //接收文件總的大小等于已經下載的數據量,加上為下載的數據量    _totalSize = _receiveSize + [responseHeader[@"Content-Length"] longLongValue];    //創建文件管理類    NSFileManager *fileManager = [NSFileManager defaultManager];    //沙盒中不存在要下載的文件,就創建該文件    if ([fileManager fileExistsAtPath:[self getFilePath]] == NO)    {        [fileManager createFileAtPath:[self getFilePath] contents:nil attributes:nil];    }    //根據路徑寫入文件    _fileHandle = [NSFileHandle fileHandleForWritingAtPath:[self getFilePath]];}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    //文件比較大的話,需要多次寫入,寫入的話,需要將光標定位到結尾    [_fileHandle seekToEndOfFile];    //將數據寫入到文件    [_fileHandle writeData:data];    //最新接收到數據的大小等于文件中已有的數據,加上剛剛下載的數據量    _receiveSize = _receiveSize + data.length;    //計算進度    float jundu = (float)_receiveSize / _totalSize;    //使用進度條來表示進度    _progress.progress = jundu;}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{    //文件完成傳輸,關閉文件管理    [_fileHandle closeFile];}- (IBAction)pause:(id)sender{    //點擊暫停,取消請求連接    [_connection cancel];    _connection = nil;}-(NSString *)getFilePath{    NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"xcode.dmg"];    return filePath;}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线视频2019最新视频| 亚洲国产精彩中文乱码av在线播放| 91精品久久久久久久久中文字幕| 一区二区在线免费视频| 亚洲深夜福利在线| 狠狠躁夜夜躁人人爽天天天天97| 亚洲国产又黄又爽女人高潮的| 久久久成人av| 国产日韩在线看片| 97精品欧美一区二区三区| 日韩在线观看av| 亚洲美女av在线播放| 久久久久国产精品www| 欧洲中文字幕国产精品| 成人免费视频在线观看超级碰| 亚洲电影免费观看高清完整版在线观看| 亚洲欧美中文字幕| 久久精品视频导航| 欧美老女人bb| 亚洲视频视频在线| 狠狠色狠色综合曰曰| 国产欧美精品va在线观看| 久久久精品久久久| 国模私拍视频一区| 欧美成人剧情片在线观看| 国产精品久久久久99| 久久久999成人| 色噜噜狠狠色综合网图区| 亚洲最新av在线| 国产va免费精品高清在线观看| 亚洲免费视频网站| 成人黄色在线播放| 国产欧美精品xxxx另类| 亚洲成av人片在线观看香蕉| 色午夜这里只有精品| 91久久在线视频| 久久久久这里只有精品| 亚洲精品福利视频| 91精品国产91久久久久久不卡| 18性欧美xxxⅹ性满足| 国产玖玖精品视频| 国产精品免费久久久久久| 性色av香蕉一区二区| 久国内精品在线| 久久久久久久999| 亚洲人午夜色婷婷| 欧美视频在线看| 日韩av电影手机在线观看| 日本成熟性欧美| 国产成人精品一区二区在线| 精品久久久久久国产91| 日韩电影免费观看在线观看| 亚洲系列中文字幕| 91tv亚洲精品香蕉国产一区7ujn| 激情久久av一区av二区av三区| 欧美激情在线观看| 亚洲亚裔videos黑人hd| 一区二区三区天堂av| 疯狂做受xxxx欧美肥白少妇| 久久午夜a级毛片| 欧美电影免费观看大全| 亚洲电影中文字幕| 欧美日韩精品国产| 亚洲第一福利网站| 欧美一区二区三区图| 久久久久久有精品国产| 欧美精品videosex极品1| 国产精品扒开腿做爽爽爽的视频| 国产精品一二区| 69av成年福利视频| 国产欧美久久久久久| 日韩精品高清视频| 欧美丝袜一区二区| 国产在线视频2019最新视频| xxxx欧美18另类的高清| 亚洲xxx视频| 91精品在线观看视频| 国产精品久久久久久久久久免费| 91精品视频在线播放| 国产精品999999| 国产日韩欧美中文| 成人444kkkk在线观看| 久久久久久欧美| 亚洲第一色中文字幕| 在线精品国产成人综合| 欧美激情网站在线观看| 欧亚精品中文字幕| 国产在线拍偷自揄拍精品| 国产日韩换脸av一区在线观看| 日韩在线视频国产| 国产成人一区二| 91精品美女在线| 欧美日韩国产第一页| 国产91在线播放九色快色| 精品欧美国产一区二区三区| 91免费高清视频| 韩国日本不卡在线| 爱福利视频一区| 亚洲色图综合久久| 久久久久国产精品一区| 国产精品91久久| 久久久久久18| 国产91成人video| 韩国视频理论视频久久| 色综合导航网站| 久久久极品av| 久久久www成人免费精品张筱雨| 日本精品中文字幕| 欧美激情网站在线观看| 成人免费视频在线观看超级碰| 亚洲国产另类 国产精品国产免费| 欧美极品美女电影一区| 精品国产户外野外| 国产a∨精品一区二区三区不卡| 欧美成人性生活| 性夜试看影院91社区| 国产专区精品视频| 欧美视频一二三| 久久久999精品视频| 日韩精品久久久久| 欧美美女15p| 亚洲精品成人久久电影| 日韩最新中文字幕电影免费看| 欧美xxxx14xxxxx性爽| 国产精品一区专区欧美日韩| 日韩在线观看免费网站| 亚洲精品国偷自产在线99热| 亚洲美女激情视频| 一本色道久久综合狠狠躁篇的优点| 中文字幕日韩有码| 亚洲成人亚洲激情| 欧美精品免费在线| 一区二区欧美亚洲| 亚洲精品一区av在线播放| 欧美激情精品久久久久久变态| 国产精品自在线| 正在播放亚洲1区| 亚洲国产精品字幕| 日韩av在线天堂网| 日韩亚洲欧美中文高清在线| 69**夜色精品国产69乱| 欧美精品久久久久久久免费观看| 爽爽爽爽爽爽爽成人免费观看| 欧美在线视频网| 欧美视频中文在线看| 欧美日韩国产一中文字不卡| 欧美乱妇高清无乱码| 久久久国产成人精品| 91tv亚洲精品香蕉国产一区7ujn| 92看片淫黄大片看国产片| 亚洲乱码av中文一区二区| 亚洲精品国产美女| 久久在线视频在线| 在线观看国产成人av片| 91精品国产91久久| 欧美日韩国产成人| 狠狠躁天天躁日日躁欧美| 国产精品久在线观看| 精品国产自在精品国产浪潮| 欧美日韩亚洲91| 亚洲一区二区三区毛片| 国产精品嫩草影院一区二区| 亚洲va国产va天堂va久久| 亚洲高清福利视频|