国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

服務(wù)器文件下載

2019-11-14 18:18:42
字體:
供稿:網(wǎng)友

文件下載基本步驟:
1.獲取下載鏈接,創(chuàng)建響應(yīng)發(fā)送請求.(使用異步請求,避免因文件過大下載時(shí)間長而阻塞主線程).
2.當(dāng)接到響應(yīng)時(shí)在下載目錄中創(chuàng)建文件.創(chuàng)建文件使用NSFileHandle進(jìn)行文件內(nèi)部處理.(檢驗(yàn)文件是否存在——利用NSFileManager創(chuàng)建文件——NSFileHandle的fileHandleForWritingAtPath方法對文件進(jìn)行寫入).
3.接收數(shù)據(jù)時(shí),將分段接收的數(shù)據(jù)寫入文件中
4.文件接收完畢后,關(guān)閉NSFileHandle.
以上為普通下載步驟,此處不用代碼示范,以下以實(shí)現(xiàn)斷點(diǎn)下載功能為例.

因?yàn)樯澈新窂皆诒境绦蛑薪?jīng)常使用,所以先提供一個(gè)獲取沙盒路徑方法

-(NSString *)getFilePath{    NSString *document=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];    NSString *filePath=[document stringByAppendingPathComponent:_fileName];    return filePath;}

下載事件

- (IBAction)download:(UIButton *)sender {    //獲取視頻地址URL    NSString *string=@"http://221.228.249.8/2/b/k/h/o/bkhoxvtmbviswrdeddgvxcbufzwvwb/he.yinyuetai.com/631B014A6B0FCDF25944EB816345F6A6.flv";    //對地址按"/"分隔存入數(shù)組,獲取文件名稱    NSArray *array=[string componentsSeparatedByString:@"/"];    _fileName=[array lastObject];    //對url進(jìn)行轉(zhuǎn)碼(當(dāng)?shù)刂分写嬖跐h子時(shí)無法無法識別,需將其轉(zhuǎn)換成符合要求的格式)    string=[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSURL *url=[NSURL URLWithString:string];    //可變響應(yīng),因?yàn)閿帱c(diǎn)下載再次發(fā)送請求的位置與之前不同    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];    //判斷之前有沒有下載數(shù)據(jù)(沙盒中是否已存在)    if([[NSFileManager defaultManager] fileExistsAtPath:[self getFilePath]])//之前已經(jīng)下載    {        //先獲取之前文件已經(jīng)下載了多少        //字典保存文件的信息(由服務(wù)器反饋)        NSDictionary *fileDic=[[NSFileManager defaultManager]attributesOfItemAtPath:[self getFilePath] error:nil];        NSLog(@"%@",fileDic);        //獲取已接受的文件大小        _receiviceSize=[fileDic[NSFileSize]longLongValue];        //bytes = 0-499 請求前500個(gè)字節(jié)的內(nèi)容        //bytes = 500- 請求500字節(jié)之后的內(nèi)容        //bytes = 500-1000 請求資源中某一范圍的內(nèi)容        //bytes = 0-1,499-500 請求多個(gè)范圍之間的內(nèi)容        NSString *bytes=[NSString stringWithFormat:@"bytes=%lld-",_receiviceSize];      //設(shè)置請求頭的Range        [request setValue:bytes forHTTPHeaderField:@"Range"];    }        _connection=[NSURLConnection connectionWithRequest:request delegate:self];}

暫停事件

- (IBAction)pause:(UIButton *)sender {    //取消請求鏈接    [_connection cancel];    _connection=nil;}

#PRagma mark ---NSURLConnectionDatasource---

//接到響應(yīng)-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    //為了獲取response里面的StatusCode狀態(tài)碼,將response強(qiáng)轉(zhuǎn)為NSHTTPURLResponse    NSHTTPURLResponse *httpResponse=(NSHTTPURLResponse *)response;    //剩余文件大小    NSDictionary *responseHead=httpResponse.allHeaderFields;    //接收的文件+剩余文件=文件總大小    _totalSize=_receiviceSize+[responseHead[@"Content-Length"]longLongValue];    NSFileManager *manager=[NSFileManager defaultManager];    //如果沙盒中沒有該文件就創(chuàng)建文件    if ([manager fileExistsAtPath:[self getFilePath]]==NO) {        [manager createFileAtPath:[self getFilePath] contents:nil attributes:nil];    }    _fileHandle=[NSFileHandle fileHandleForWritingAtPath:[self getFilePath]];}//接到數(shù)據(jù)-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    //將光標(biāo)定位在文件末尾,每次在末位寫文件(默認(rèn)是在文件頭部寫)    [_fileHandle seekToEndOfFile];    [_fileHandle writeData:data];    //實(shí)時(shí)更新文件長度    _receiviceSize=_receiviceSize+data.length; }//接收完畢-(void)connectionDidFinishLoading:(NSURLConnection *)connection{    [_fileHandle closeFile];
}
 
 
 
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴安县| 西青区| 塘沽区| 南平市| 乌拉特后旗| 桓仁| 遂溪县| 黄山市| 德昌县| 柳林县| 麦盖提县| 壶关县| 中西区| 武清区| 开封市| 余姚市| 西乌| 安图县| 临潭县| 丰原市| 天水市| 台南市| 丰城市| 达日县| 奇台县| 阿拉善右旗| 称多县| 米林县| 金塔县| 澎湖县| 阳山县| 日照市| 安溪县| 二连浩特市| 大悟县| 泰顺县| 云阳县| 宁国市| 灵川县| 孟津县| 永安市|