输出流:NSOutputStream
作用:用于与下载
//outputStreamToFileAtPath: append:; 方法会根据路径创建文件,append是否追加任务
NSOutputStream *stream = [NSOutputStream outputStreamToFileAtPath:path append:YES];
//打开输出流
[self.stream open];
注意点:如果path下有文件,输出流会在该文件下追加任务,如果该路径下没有文件,open方法会创建文件,输出流再次文件下追加任务
断点下载核心代码:
用于解决重新开始下载,会把文件重新下载一遍,而非下载还未下载的数据,造成的后果就是下载文件的数据越来越大
//设置请求头信息
NSString *range = [NSString stringWithFormat:@"bytes=%zd-",currentSize];
[request setValue:range forHTTPHeaderField:@"Range"];
如何得到已经下载的文件大小
//0.得到已经下载的文件数据的大小
/*
第一个参数:文件的路径
*/
//获取要下载数据到哪个文件的路径
self.path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:KFileName];
NSLog(@"%@",self.path);
//获取已下载的数据大小
NSDictionary *file = [[NSFileManager defaultManager] attributesOfItemAtPath:self.path error:nil];
NSLog(@"%@",file);
NSInteger currentData = [file[@"NSFileSize"] integerValue];
self.currentData = currentData;
注意点:如果要显示进度信息,预计下载的大小是此次要下载数据的大小,所以要加上之前已经下载的数据大小,才是文件的总大小
//在代理方法-didReceiveResponse中
//获取数据总大小
self.totalData = response.expectedContentLength + self.currentData;