. - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL didCompleteWithError: will * still be called. */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask notify the delegate of download progress. */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask ---- 3. - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask _t)expectedTotalBytes; 看一下AFN中该方法的实现 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
文章目录 背景 介绍 方案及代码 1、新建MAUI项目 2、建立NSUrlSession会话连接 3、使用NSUrlSessionDownloadTask 创建下载任务 4、DidWriteData 监听下载 本文我们借助NSUrlSession中的NSUrlSessionDownloadTask来创建下载任务。下载任务直接将服务器的响应数据写入临时文件,在数据从服务器到达时为应用提供进度更新。 注意:无论下载多少文件,我们只需要初始化一个URLSession 3、使用NSUrlSessionDownloadTask 创建下载任务 这里我们使用 NSUrlSessionDownloadTask 在此之前我们需要调整 StartDownload 方法,将文件下载任务NSUrlSessionDownloadTask 存起来,用户后续恢复下载。 关于NSURLSessionDownloadTask 更多的内容请参考官方文档 https://developer.apple.com/documentation/foundation/nsurlsessiondownloadtask
2017-05-0217:47:05 发表评论 425℃热度 使用现状 普通任务和上传 下载任务方式 请求方法的控制 断点续传的方式 配置信息 NSURLSessionDataTask NSURLSessionDownloadTask 从这些方法中得知,分别返回了NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask,NSURLSessionStreamTask NSURLSessionDownloadTask在下载文件的时候,是将数据一点点地写入本地的临时文件。 所以在 completionHandler 这个 block 里,我们需要把文件从一个临时地址移动到一个永久的地址保存起来: /** * NSURLSessionDownloadTask 下载任务 下载完成调用 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
再创建一个下载任务类NSURLSessionDownloadTask类,将session加入到下载任务中。 开启下载任务。 其中,开启下载任务后,NSURLSessionDownloadTask默认就会将数据一点点写入本地沙盒的临时文件(tmp)中。这些原本需要我们自己做的任务苹果默认都帮助我们做好了。 但是,由于NSURLSessionDownloadTask写入的是本地沙盒的临时文件中,所以我们需要在临时文件下载之后,即在NSURLSessionDownloadTask的completionHandler 而且NSURLSession还有一个方法- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;,可以利用上次停止下载的 这里使用了NSURLSessionDownloadTask完成离线下载。但是NSURLSessionDownloadTask会自动将文件下载到了tmp临时文件中。
NSURLSession和NSURLSessionConfiguration,以及3个NSURLSessionTask的子类:NSURLSessionDataTask,NSURLSessionUploadTask,和NSURLSessionDownloadTask NSURLSessionDownloadTask:这个task的主要用途是进行文件下载,它针对大文件的网络请求做了更多的处理,比如下载进度,断点续传等等。 下载任务支持断点续传,第三种方式是通过之前已经下载的数据来创建下载任务: -(NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request; -(NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url; -(NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData; 同样地可以通过completionHandler指定任务完成后的回调代码块: -(NSURLSessionDownloadTask
*> *uploadTasks; //前面那个session管理的download task的集合 @property (readonly, nonatomic, strong) NSArray <NSURLSessionDownloadTask -------------------- /// @name Running Download Tasks ///----------------------------- //构造下载任务 - (NSURLSessionDownloadTask void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * _Nullable (^)(NSURLSession *session, NSURLSessionDownloadTask NSURL *location); typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask //下载任务下载文件完成后的回调方法 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
根据职能不同Task有三种 // (1)NSURLSessionUploadTask: 上传用的Task, 传完以后不会再下载返回结果 // (2)NSURLSessionDownloadTask *****************/ #pragma mark 下载完成后调用的方法 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask param totalBytesExpectedToWrite 文件总大小 */ -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
The file * will be removedautomatically. */ - (NSURLSessionDownloadTask *)downloadTaskWithRequest:( downloadTask:(NSURLSessionDownloadTask *)downloadTask 4. downloadTask:(NSURLSessionDownloadTask *)downloadTask 4. 对象的方法 /** Creates an `NSURLSessionDownloadTask`with the specified request. 对象的方法 /** Creates an`NSURLSessionDownloadTask` with the specified resume data.
断点续传的关键API: - (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;, 可以利用上次停止前已下载好的 NSURLSession对象 NSURLSession *session = [NSURLSession sharedSession]; // 创建下载任务,其中location为下载的临时文件路径 NSURLSessionDownloadTask defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; // 创建任务 NSURLSessionDownloadTask @param totalBytesExpectedToWrite 文件总大小 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask totalBytesExpectedToWrite]; } /** * 恢复下载后调用 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask proposedResponse); typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask NSURL *location); typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask totalBytesExpectedToWrite); typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask
URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask session dataTask:(NSURLSessionDataTask *)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask :(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask
. */ - (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task NSURLSessionUploadTask : NSURLSessionDataTask @interface NSURLSessionDataTask : NSURLSessionTask // 下载 @interface NSURLSessionDownloadTask 下载任务 - (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task
NSURLRequest *)request; - (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request; - (NSURLSessionDownloadTask to NSURLSessionUploadTasks. */ @interface NSURLSessionUploadTask : NSURLSessionDataTask @end /* * NSURLSessionDownloadTask is a task that represents a download to * local storage. */ @interface NSURLSessionDownloadTask :
downloadTaskWithRequest:request]resume]; 在下面的回调方法中可以进行下载进度的监听: - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask @",error); } //此方法只有下载成功才会调用 文件放在location位置 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
解析服务器返回数据 NSLog(@"%@", [[NSString alloc] initWithData:self.dataM encoding:NSUTF8StringEncoding]); } NSURLSessionDownloadTask NSURLSession *session = [NSURLSession sharedSession]; //创建会话请求 //优点:该方法内部已经完成了边接收数据边写沙盒的操作,解决了内存飙升的问题 NSURLSessionDownloadTask
NSURLSessionDownloadTask实现断点下载 NSURLSession给提供了专用用来下载的Task,NSURLSessionDownloadTask,使用NSURLSessionDownloadTask NSURLSessionDownloadTask的创建 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ; NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_03.mp4"]; NSURLSessionDownloadTask *downLoadTask = [session downloadTaskWithURL:url]; NSURLSessionDownloadTask也提供了一些方法 //这个方法可以拿到恢复下载需要的数据 /totalBytesExpectedToWrite } // 2.恢复下载的时候调用 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
Nullable responseObject, NSError * _Nullable error))completionHandler; // 下面2个是DownloadTask相关的方法 - (NSURLSessionDownloadTask location))block; - (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask // - (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request; // - (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request; // - (NSURLSessionDownloadTask *)downloadTaskWithURL :(NSURL *)url; // - (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData
. */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask notify the delegate of download progress. */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask key, whose value is the resume * data. */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
property (strong, nonatomic, readonly) NSURLSession *backgroundSession; @property (strong, nonatomic) NSURLSessionDownloadTask strneed]; } return strneed; } 获取图片回调 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask
1、NSURLRequest 2、NSURLSession 3、NSURLSessionTask 以及它的三个子类:NSURLSessionDataTask/NSURLSessionDownloadTask macos); */ /* 下面是Task解析 NSURLSessionTask是一个抽象子类,它有三个子类:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask notify the delegate of download progress. - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask