视频下载我使用的是
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
self.download = [self.urlSessionManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
if (progress && downloadProgress.finished) {
progress(downloadProgress.completedUnitCount, downloadProgress.totalUnitCount);
}
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
// 这里要返回一个NSURL,其实就是文件的位置路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
// 使用建议的路径
path = [path stringByAppendingPathComponent:response.suggestedFilename];
NSLog(@"》》》%@",path);
// 转化为文件路径
return [NSURL fileURLWithPath:path];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
if (completion) {
completion(filePath, error.localizedDescription);
}
}];
[self.download resume];
此处self.urlSessionManager是AFURLSessionManager的对象
后台传的视频地址是一个数组,所以我用了for循环来下载,开始时暂停下载里只写了[self.download cancle],后来发现我暂停后下载任务还在执行,仔细一想是因为for循环创建了多个下载队列,我暂停的时候只是暂停了其中一个队列,后来只能在网上查资料停止当前所有下载队列的解决办法。
// 取消当前所有的网络请求
NSMutableArray *taskData = [NSMutableArray arrayWithArray:[self.urlSessionManager downloadTasks]];
[taskData enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (((NSURLSessionDownloadTask *)obj).state != NSURLSessionTaskStateCompleted) {
[(NSURLSessionDownloadTask *)obj cancel];
}
}];
[taskData removeAllObjects];
后来又找到了这个方法,使用以后发现还是差点儿什么,于是我就在停止的地方加上了一个for循环并同步执行,然后停止方法起了作用。