您的位置:首页 > 移动开发 > IOS开发

iOS项目开发—文件下载功能的实现

2014-12-23 16:41 716 查看
一、简单说明

1.思路

//
//  TXViewController.m
//  文件下载
//
//  Created by 鑫 on 14/12/23.
//  Copyright (c) 2014年 梁镋鑫. All rights reserved.
//

#import "TXViewController.h"
#import "TXFileDownloader.h"
@interface TXViewController ()

@property(nonatomic,strong)TXFileDownloader *fileDownloader;
@property (weak, nonatomic) IBOutlet UIButton *btn;
@property (weak, nonatomic) IBOutlet UIProgressView *progress;
@end

@implementation TXViewController

- (void)viewDidLoad
{
[super viewDidLoad];
}

#pragma mark-懒加载
-(TXFileDownloader *)fileDownloader
{
if (_fileDownloader==nil) {
_fileDownloader=[[TXFileDownloader alloc]init];
//设置文件下载路径
_fileDownloader.url=@"http://192.168.1.53:8080/MJServer/resources/video.zip";

//设置文件保存路径
NSString *caches=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath=[caches stringByAppendingPathComponent:@"video.zip"];
_fileDownloader.destPath=filePath;

//获取10的真实类型,把它作为a的类型
//        typeof(10) a = 20; // int a = 20;
__weak typeof(self) vc=self;
_fileDownloader.progressHandler=^(double progress)
{
vc.progress.progress=progress;
NSLog(@"%f",progress);
};
_fileDownloader.completionHandler=^{
NSLog(@"下载完成");
[vc.btn setTitle:@"下载已经完成" forState:UIControlStateNormal];
};
_fileDownloader.failureHandler=^(NSError *error){
NSLog(@"下载错误!%@",error);
};
}
return _fileDownloader;
}

//点击下载按钮,处理操作
- (IBAction)star {
if (self.fileDownloader.isDownloading) {//如果正在下载,那么调用方法暂停
[self.fileDownloader pause];
[self.btn setTitle:@"暂停" forState:UIControlStateNormal];
}else//如果没有正在下载,那么调用下载方法
{
[self.fileDownloader start];
[self.btn setTitle:@"下载" forState:UIControlStateNormal];
}
}

@end


View Code

代码:

控制器想监听下载器的下载进度,控制器想监听下载器的下载完毕,控制器想监听下载器的下载失败等都可以使用block的方式进行。

打印查看:



2.代码说明

(1)创建文件存储路径(写入到沙盒)

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

NSString *filePath=[caches stringByAppendingPathComponent:@"video.zip"];

(2)创建一个空的文件夹( NSFileManager类的使用)

NSFileManager *mgr=[NSFileManager defaultManager];

(3)创建写数据的文件句柄

self.writeHandle=[NSFileHandle fileHandleForWritingAtPath:filePath];

(4)把data写入到创建的空文件中,但是不能使用writeTofile(会覆盖)

移动句柄到文件的尾部 [self.writeHandle seekToEndOfFile];

(5)下载完毕的时候,关闭连接

[self.writeHandle closeFile];

3、Range简单说明

通过设置请求头Range可以指定每次从网路下载数据包的大小

Range示例

bytes=0-499 从0到499的头500个字节

bytes=500-999 从500到999的第二个500字节

bytes=500- 从500字节以后的所有字节

bytes=-500 最后500个字节

bytes=500-599,800-899 同时指定几个范围

Range小结

- 用于分隔

前面的数字表示起始字节数

后面的数组表示截止字节数,没有表示到末尾

, 用于分组,可以一次指定多个Range,不过很少用

注意:关键代码

从self.currentLength字节部分重新开始读取

NSString *value=[NSString stringWithFormat:@"bytes=%lld-",self.currentLength];

[request setValue:value forHTTPHeaderField:@"Range"];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐