大文件的下载与上传
来源:互联网 发布:虚拟关注软件 编辑:程序博客网 时间:2024/05/21 12:44
下载大文件NSURLSessionDownloadTask
下载下来的文件会被存放在临时文件夹下,如果不做处理,会被自动删除以节省空间, 需要复制到其他位置.
NSURL *imageURL = [NSURL URLWithString:kImagePath];//~/Documents/image.pngNSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"image.png"];NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:imageURL completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { //location下载的文件的存储位置 NSLog(@"location %@", location.path); //tmp->复制->document下 [[NSFileManager defaultManager] copyItemAtPath:location.path toPath:path error:nil]; NSData *data = [NSData dataWithContentsOfFile:path]; UIImage *image = [UIImage imageWithData:data]; //回到主线程中,设置图片 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ _imageView.image = image; }]; NSLog(@"path : %@", path);}];[task resume];
上传大文件NSURLSessionUploadTask
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"填写服务器地址"]];NSURL *fileURL = [NSURL URLWithString:@"本地要上传的文件地址"];NSURLSessionUploadTask *task = [[NSURLSession sharedSession] uploadTaskWithRequest:request fromFile:fileURL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {}];[task resume];
任务的暂停
, 取消
, 继续
, 开始
暂停
[dataTask suspend];
取消
[dataTask cancel];
继续和开始
[dataTask resume];
通过代理方式监听网络下载任务进度
可以通过代理的方式,进行网络请求. 这样可以实时监听网络请求的相关状态. 例如上传的进度, 下载的进度, 任务完成情况等.
带有代理的请求任务
@interface ViewController ()<NSURLSessionDataDelegate>//实时监听下载进度,需要通过代理方法实现/* defaultSessionConfiguration:下载的数据存放在tmp临时文件夹下 ephemeralSessionConfiguration:缓存不存放在磁盘,而是在内存中(不推荐) backgroundSessionConfiguration:网络操作支持后台模式 */NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];//参数3:代理方法运行的线程,填nil,是在子线程中NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];_dataTask = [session dataTaskWithURL:[NSURL URLWithString:kImagePath]];
代理方法监听下载任务状态
下载的数据并不是一次性传递的, 而是分批次. 每次的数据大小根据网络情况而定.
需要使用可变的数据类型把这些零散的数据拼接起来.
//当收到数据时触发的,数据是分批次传递,所以此方法会多次触发- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{ [_fileData appendData:data]; UIImage *image = [UIImage imageWithData:_fileData]; dispatch_async(dispatch_get_main_queue(), ^{ //已有数据长度除以总长度, 得到下载百分比 _progressView.progress = dataTask.countOfBytesReceived *1.0/dataTask.countOfBytesExpectedToReceive; _imageView.image = image; });}//数据请求完毕时- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{ //下载完毕以后, 保存下载下来的数据到磁盘中 if (!error) { [_fileData writeToFile:self.filePath atomically:YES]; }}
0 0
- 大文件的下载与上传
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的下载与上传
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 文件的上传与下载
- 10763
- 菜鸟参与2017华为软件比赛资料分享
- PHP——输出语句
- logback
- ES6开发环境快速搭建
- 大文件的下载与上传
- [区块链应用]区块链技术在商品溯源流通领域的应用
- 插入排序分析与Java实现
- ssh无秘钥登录步骤与原理
- 牛顿法,阻尼牛顿法
- 计算Java List中的重复项出现次数【转】
- 电池条添加AF的网络监听
- AdaBoost中利用Haar特征进行人脸识别算法分析与总结
- SQLServer2008 字段内批量替换