iOS --下载文件的方法,大文件下载FileHandle

来源:互联网 发布:windows刷新英文 编辑:程序博客网 时间:2024/05/20 11:20

1.小文件的下载方法

        A.NSURL *url = [NSURLURLWithString:@"http://image2.sina.com.cn/ent/v/m/p/2005-11-11/U92P28T3D893697F329DT20051111200426.jpg"];

        NSData *data = [NSDatadataWithContentsOfURL:url];

        NSLog(@"%@",data);

        

        B.[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:url] queue:[NSOperationQueuemainQueue]completionHandler:^(NSURLResponse *_Nullable response,NSData * _Nullable data,NSError * _Nullable connectionError) {

                NSLog(@"%@",data);

        }];

        

        C.[NSURLConnectionconnectionWithRequest:[NSURLRequestrequestWithURL:url]delegate:self];


2.获取文件大小的方法:两种方法:(nonnull NSURLResponse *)response -》response.expectedContentLength;

(NSHTTPURLResponse *)response -》[response.allHeaderFields[@"Content-Length"]floatValue];

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response{

//(nonnull NSURLResponse *)response{

//        _totalData = response.expectedContentLength;

        _totalData = [response.allHeaderFields[@"Content-Length"]floatValue];

        NSLog(@"%s,%lld",__func__,response.expectedContentLength);

}


3.NSURLConnection 需要手动写入沙盒

        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject];

        NSString *file = [cachesstringByAppendingPathComponent:@"hahah.jpg"];

        [self.responseDatawriteToFile:fileatomically:YES];

        self.responseData =nil;


4.大文件分段下载:NSFileHandle

#define WXYFile [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"hahah.jpg"]


      //创建文件句柄对象

        NSFileHandle *handle = [NSFileHandlefileHandleForWritingAtPath:WXYFile];

        

  //指定分段下载数据的写入位置

        [handle seekToEndOfFile];

        [handle writeData:data];

        

      //关闭handle,下载完成后

[handle closeFile];

self.handle = nil;


self.contentLenght = [response.allHeaderField[@"Content-Length"]floatValue];

self.currentLenght += data.length;

self.progressView.progress = 1.0 * self.currentLenght / self.contentLength;



0 0
原创粉丝点击