iOS开发网络篇—文件下载(暂停和恢复)

时间:2025-01-30 07:57:44
1 #import "" 2 3 @interface YYViewController () 4 //文件数据 5 @property(nonatomic,strong)NSMutableData *fileData; 6 //文件句柄 7 @property(nonatomic,strong)NSFileHandle *writeHandle; 8 //当前获取到的数据长度 9 @property(nonatomic,assign)long long currentLength; 10 //完整数据长度 11 @property(nonatomic,assign)long long sumLength; 12 //是否正在下载 13 @property(nonatomic,assign,getter = isdownLoading)BOOL downLoading; 14 //请求对象 15 @property(nonatomic,strong)NSURLConnection *cnnt; 16 //获取按钮 17 @property (weak, nonatomic) IBOutlet UIButton *btn; 18 //获取进度条 19 @property (weak, nonatomic) IBOutlet UIProgressView *progress; 20 //按钮点击事件 21 - (IBAction)star; 22 23 @end 24 25 @implementation YYViewController 26 27 - (void)viewDidLoad 28 { 29 [super viewDidLoad]; 30 } 31 32 - (IBAction)star { 33 //当下载完成后,点击按钮文字变为已下载 34 35 //判断当前是否正在下载 36 if () {//如果当前正在下载,那么点击按钮,按钮变为暂停状态 37 [ setTitle:@"下载" forState:UIControlStateNormal]; 38 =NO; 39 40 //取消发送请求 41 [ cancel]; 42 =nil; 43 }else 44 {//如果当前没有下载,那么点击按钮,开始或者是继续下载 45 [ setTitle:@"暂停" forState:UIControlStateNormal]; 46 =YES; 47 //创建下载路径 48 NSURL *url=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/resources/"]; 49 50 //创建一个请求 51 // NSURLRequest *request=[NSURLRequest requestWithURL:url]; 52 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url]; 53 54 //设置请求头信息 55 //字节部分重新开始读取 56 NSString *value=[NSString stringWithFormat:@"bytes=%lld-",]; 57 [request setValue:value forHTTPHeaderField:@"Range"]; 58 59 //发送请求(使用代理的方式) 60 =[NSURLConnection connectionWithRequest:request delegate:self]; 61 // [ start]; 62 } 63 } 64 65 #pragma mark- NSURLConnectionDataDelegate代理方法 66 /* 67 *当接收到服务器的响应(连通了服务器)时会调用 68 */ 69 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 70 { 71 #warning 判断是否是第一次连接 72 if () return; 73 74 //1.创建文件存数路径 75 NSString *caches=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; 76 NSString *filePath=[caches stringByAppendingPathComponent:@""]; 77 78 79 80 //2.创建一个空的文件,到沙盒中 81 NSFileManager *mgr=[NSFileManager defaultManager]; 82 //刚创建完毕的大小是o字节 83 [mgr createFileAtPath:filePath contents:nil attributes:nil]; 84 85 //3.创建写数据的文件句柄 86 =[NSFileHandle fileHandleForWritingAtPath:filePath]; 87 88 //4.获取完整的文件长度 89 =; 90 } 91 92 /* 93 *当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据) 94 */ 95 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 96 { 97 //累加接收到的数据长度 98 +=; 99 //计算进度值 100 double progress=(double)/; 101 =progress; 102 103 104 //一点一点接收数据。 105 NSLog(@"接收到服务器的数据!---%d",); 106 //把data写入到创建的空文件中,但是不能使用writeTofile(会覆盖) 107 //移动到文件的尾部 108 [ seekToEndOfFile]; 109 //从当前移动的位置,写入数据 110 [ writeData:data]; 111 } 112 113 /* 114 *当服务器的数据加载完毕时就会调用 115 */ 116 -(void)connectionDidFinishLoading:(NSURLConnection *)connection 117 { 118 NSLog(@"下载完毕----%lld",); 119 //关闭连接,不再输入数据在文件中 120 [ closeFile]; 121 =nil; 122 123 //清空进度值 124 =0; 125 =0; 126 127 //设置按钮文字为“已经下载完成” 128 [ setTitle:@"已经下载完成" forState:UIControlStateNormal]; 129 [ setEnabled:NO]; 130 } 131 /* 132 *请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误) 133 */ 134 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 135 { 136 } 137 @end