iOS 文件下载 (AFNetwork 三方框架 含progressView)五

1.创建request

- (void)download2
{

    NSString *urlString = @"http:192.168.0.179:8080/Myweb/download.do";
    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
      NSLog(@"hello");
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [[self.session downloadTaskWithRequest:request] resume];

}

最后一句

[[self.session downloadTaskWithRequest:request] resume];

的session,本文使用懒加载

2. session懒加载,并添加代理,监听文件下载情况

// 懒加载
- (NSURLSession *)session
{
    if(_session == nil)
    {
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];

    }
    return _session;
}

3.进度更新和label下载完成百分比更新(注意,一定要在主线程更新,不然无法显示)

/* Sent periodically to notify the delegate of download progress. */
/**
[""] *	@brief	更新进度条,使用此代理
[""] *
[""] *	@param 	session 	session
[""] *	@param 	downloadTask 	下载任务
[""] *	@param 	bytesWritten 	当前写入bytes
[""] *	@param 	totalBytesWritten 	当前总共写入bytes
[""] *	@param 	totalBytesExpectedToWrite 	期望写入的总bytes
[""] *
[""] *	@return	<#return value description#>
[""] */
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{

    float progress = (float)totalBytesWritten / totalBytesExpectedToWrite;
    NSLog(@"%f", progress);
    //主线程更新UI
    dispatch_async(dispatch_get_main_queue(), ^(void){
        self.progressLabel.text=[NSString stringWithFormat:@"%%%.0f",progress*100];
             [self.progressView setProgress:progress animated:YES];
    });

}

4. 下载完成,将下载的数据写入指定缓存路径。

/**
 [""] *	@brief	The delegate should copy or move the file at the given location to a new location as it will be
                removed when the delegate message returns.
[""] *
[""] *	@param 	session 	session description
[""] *	@param 	downloadTask 	downloadTask 下载任务
[""] *	@param 	location 	下载文档位置(临时)
[""] *
[""] *	@return
[""] */
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location

{
    NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

    NSString *retStr = [downloadTask.response.suggestedFilename stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"%@ \n",retStr);

    NSString *path = [cacheDir stringByAppendingPathComponent:retStr];
    NSLog(@"%@",path);
    //NSURL *url2=location;
     NSLog(@"%@",location);
    NSData *mydata=[NSData dataWithContentsOfURL:location];
    [mydata writeToFile:path atomically:YES];

}
时间: 2024-10-28 01:04:26

iOS 文件下载 (AFNetwork 三方框架 含progressView)五的相关文章

iOS 文件下载 (AFNetwork 三方框架 文件名中文字符乱码问题解决)四

很久以前,就把这篇文章的andriod部分和服务器部分搞定,最近论文送审途中,于是写了几行简单的代码如下. 把AFNetwork拿来做一下.具体代码如下: -(void)download { NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] i

ios数据库sqlite-第三方框架FMDB,关于线程安全的事务处理

导入sqlite3数据库和第三方框架FMDB // 1.获取沙盒路径 NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; path = [path stringByAppendingPathComponent:@"FMDB.sqlite"]; NSLog(@"%@",path); //2.创建F

iOS 视频三方框架VLC

iOS 中的系统自带的视频播放 只支持 mp4/m4v/mov 的格式播放,如果想播放其他格式类型的视频文件,那么系统自带的框架是播放不了的,正因为如此,我们才需要一款优秀的三方框架 来进行播放各种不同格式类型的视频文件. VLC 是多媒体是一种支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议. VLC框架跨平台可移植性高,在众多系统中广为使用.当然这只是对其的了解. 下面说重点. 那么这么牛逼的东西怎么用在iOS开发中呢. 1,去VCL官方网站下载框架,(

iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MVC 框架.它同时提供了多用户实时通讯支持,一旦启动 JetStream 后端服务,通过 WebSocket 协议可以分分钟建立多用户实时通讯应用.DeckRocket – 在相同 WiFi 网络环境内,通过iPhone 控制并播放 Mac 中的 PDF 文档.ScanBook – 扫扫图书:可以扫描

iOS开发常用三方库、插件、知名博客等等

TimLiu-iOS   Swift版本点击这里 欢迎加入QQ交流群: 594119878 介绍 这是一个用于iOS开发的各种开源库.开源资料.开源技术等等的索引库. github排名 https://github.com/trending,github搜索:https://github.com/search 使用方法 根据目录关键字搜索,记得包含@,以保证搜索目录关键字的唯一性. 问题反馈 期待大家和我们一起共同维护,同时也期望大家随时能提出宝贵的意见(直接提交issues即可).请广大网友只

《iOS应用逆向工程》学习笔记(五)初尝越狱插件OpenSSH

首先在越狱机子上装上OpenSSH插件,然后查看设备的IP地址,这里假设为192.168.xxx.xxx. 然后用Mac上的Terminal通过Open SSH连接到设备上(初次登录密码是alpine,必须立即修改,否则任何人都可以连接到你的机子上搞破坏). 连接命令为:ssh [email protected]设备IP地址 修改密码命令为:passwd 例如: $ ssh [email protected] The authenticity of host '192.168.xxx.xxx (

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A

iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCo

iOS 开发之照片框架详解

一. 概要 在 iOS 设备中,照片和视频是相当重要的一部分.最近刚好在制作一个自定义的 iOS 图片选择器,顺便整理一下 iOS 中对照片框架的使用方法.在 iOS 8 出现之前,开发者只能使用 AssetsLibrary 框架来访问设备的照片库,这是一个有点跟不上 iOS 应用发展步伐以及代码设计原则但确实强大的框架,考虑到 iOS7 仍占有不少的渗透率,因此 AssetsLibrary 也是本文重点介绍的部分.而在 iOS8 出现之后,苹果提供了一个名为 PhotoKit 的框架,一个可以