1.
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:strUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSProgress *progress = nil;
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
return [NSURL fileURLWithPath:destFile];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
__strong typeof(self) strongSelf = weakSelf;
if (nil != error)
{
completionBlk(destFile, NO, context);
}
else
{
if (DMSTKAudioCacheTypeAudio == cacheType)
{
[strongSelf insertAudioDataWithFilePath:name fileSize:response.expectedContentLength createDate:[NSDate date]];
}
else if (DMSTKAudioCacheTypeLyrics == cacheType)
{
[strongSelf insertLrcDataWithFilePath:name fileSize:response.expectedContentLength createDate:[NSDate date]];
}
completionBlk(destFile, YES, context);
}
}];
[downloadTask resume];
2. 下载进度
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.inputStream = [NSInputStream inputStreamWithURL:url];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:destFile append:NO];
//下载进度控制
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
float progress = (float)totalBytesRead / totalBytesExpectedToRead;
if (nil != progressBlk)
{
progressBlk(destFile, progress, context);
}
if (totalSize <= 0)
{
totalSize = totalBytesExpectedToRead;
}
}];
//已完成下载
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
__strong typeof(self) strongSelf = weakSelf;
//...
if (nil != completionBlk)
{
completionBlk(destFile, YES, context);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (nil != completionBlk)
{
completionBlk(destFile, NO, context);
}
}];
[operation start];