博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大文件下载
阅读量:5817 次
发布时间:2019-06-18

本文共 3120 字,大约阅读时间需要 10 分钟。

@interface HMViewController () <NSURLConnectionDataDelegate>

/**

 *  用来写数据的文件句柄对象

 */

@property (nonatomic, strong) NSFileHandle *writeHandle;

/**

 *  文件的总大小

 */

@property (nonatomic, assign) long long totalLength;

/**

 *  当前已经写入的文件大小

 */

@property (nonatomic, assign) long long currentLength;

 

@property (nonatomic, weak) DACircularProgressView *circleView;

@end

 

@implementation HMViewController

 

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    

    DACircularProgressView *circleView = [[DACircularProgressView alloc] init];

    circleView.frame = CGRectMake(100, 50, 100, 100);

    circleView.progressTintColor = [UIColor redColor];

    circleView.trackTintColor = [UIColor blueColor];

    circleView.progress = 0.01;

    [self.view addSubview:circleView];

    self.circleView = circleView;

}

 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    // 1.URL

    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/music.zip"];

    

    // 2.请求

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    

    // 3.下载(创建完conn对象后,会自动发起一个异步请求)

    [NSURLConnection connectionWithRequest:request delegate:self];

}

 

#pragma mark - NSURLConnectionDataDelegate代理方法

/**

 *  请求失败时调用(请求超时、网络异常)

 *

 *  @param error      错误原因

 */

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

    NSLog(@"didFailWithError");

}

 

/**

 *  1.接收到服务器的响应就会调用

 *

 *  @param response   响应

 */

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

    // 文件路径

    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    NSString *filepath = [caches stringByAppendingPathComponent:@"videos.zip"];

    

    // 创建一个空的文件 沙盒中

    NSFileManager *mgr = [NSFileManager defaultManager];

    [mgr createFileAtPath:filepath contents:nil attributes:nil];

    

    // 创建一个用来写数据的文件句柄

    self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filepath];

    

    // 获得文件的总大小

    self.totalLength = response.expectedContentLength;

}

 

/**

 *  2.当接收到服务器返回的实体数据时调用(具体内容,这个方法可能会被调用多次)

 *

 *  @param data       这次返回的数据

 */

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

    // 移动到文件的最后面

    [self.writeHandle seekToEndOfFile];

    

    // 将数据写入沙盒

    [self.writeHandle writeData:data];

    

    // 累计文件的长度

    self.currentLength += data.length;

    

    NSLog(@"下载进度:%f", (double)self.currentLength/ self.totalLength);

    self.circleView.progress = (double)self.currentLength/ self.totalLength;

}

 

/**

 *  3.加载完毕后调用(服务器的数据已经完全返回后)

 */

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    self.currentLength = 0;

    self.totalLength = 0;

    

    // 关闭文件

    [self.writeHandle closeFile];

    self.writeHandle = nil;

}

@end

a:NSFileHandle只能打开现成的文件,所以如果是新文件则需要NSFileManager先创建新文件;

b:打开一个文件就后,就需要关闭一个文件;

c:根据不同的要求可能要设定不同的偏移量(即光标所在位置),可以通过移动到开头或结尾,也可以先获取当前位置然后增加和减少多少字节来移动;

d:文件路径是NSString对象,可以用 stringByAppendingPathComponent+文件全称 方法构造一个完整的文件路径;

e:往文件里面写的内容是NSData,如果是其他的格式则可以用 dataUsingEncoding : NSUTF8StringEncoding 来转化成data类型;

f:同样,目录的写法于Linux类似,~家目录,/根目录,.当前目录,..父目录,用/表示层级等。

(1)NSFileManager(详见:http://blog.csdn.net/enuola/article/details/7797055)

转载于:https://www.cnblogs.com/seeworld/p/6013293.html

你可能感兴趣的文章
WCF
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
Android实例-录音与回放(播放MP3)(XE8+小米2)
查看>>
CSS——(2)与标准流盒模型
查看>>
MYSQL 基本SQL语句
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
[nodejs] nodejs开发个人博客(五)分配数据
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>
Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
让前端小姐姐愉快地开发表单
查看>>
Web前端JQuery入门实战案例
查看>>
7zZip zip RAR iOS
查看>>