iOS开发网络篇—文件下载(二·合理)

iOS开发网络篇—文件下载(二·合理)

一、边下载,边写入

1.思路

把下载的data追加到文件的尾部,直到所有的数据下载完为止。

1.在连通了服务器的时候,创建一个空的文件到沙盒中NSFileManager(文件管理类)

2.创建写数据的文件句柄

3.在接收到服务器返回的数据后,把data写入到创建的空文件中,但是不能使用writeTofile(会覆盖)

3.1移动到文件的尾部

3.2从当前移动的位置,写入数据

4.服务器的数据加载完毕后关闭连接,不再输入数据在文件中

二、代码示例

 1 //
 2 //  YYViewController.m
 3 //  01-文件的下载(不合理)
 4 //
 5 //  Created by apple on 14-6-30.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8
 9 #import "YYViewController.h"
10
11 @interface YYViewController ()
12 @property(nonatomic,strong)NSMutableData *fileData;
13 @property(nonatomic,strong)NSFileHandle *writeHandle;
14 - (IBAction)star;
15
16 @end
17
18 @implementation YYViewController
19
20 - (void)viewDidLoad
21 {
22     [super viewDidLoad];
23 }
24
25 - (IBAction)star {
26     //创建下载路径
27
28     NSURL *url=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/resources/videosres.zip"];
29
30     //创建一个请求
31     NSURLRequest *request=[NSURLRequest requestWithURL:url];
32
33     //发送请求(使用代理的方式)
34     NSURLConnection *connt=[NSURLConnection connectionWithRequest:request delegate:self];
35     [connt start];
36 }
37
38 #pragma mark- NSURLConnectionDataDelegate代理方法
39 /*
40  *当接收到服务器的响应(连通了服务器)时会调用
41  */
42 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
43 {
44     //1.创建文件存数路径
45     NSString *caches=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
46     NSString *filePath=[caches stringByAppendingPathComponent:@"video.zip"];
47
48
49
50     //2.创建一个空的文件,到沙盒中
51     NSFileManager *mgr=[NSFileManager defaultManager];
52     //刚创建完毕的大小是o字节
53     [mgr createFileAtPath:filePath contents:nil attributes:nil];
54
55     //3.创建写数据的文件句柄
56     self.writeHandle=[NSFileHandle fileHandleForWritingAtPath:filePath];
57 }
58
59 /*
60  *当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)
61  */
62 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
63 {
64     //一点一点接收数据。
65     NSLog(@"接收到服务器的数据!---%d",data.length);
66     //把data写入到创建的空文件中,但是不能使用writeTofile(会覆盖)
67     //移动到文件的尾部
68     [self.writeHandle seekToEndOfFile];
69     //从当前移动的位置,写入数据
70     [self.writeHandle writeData:data];
71 }
72
73 /*
74  *当服务器的数据加载完毕时就会调用
75  */
76 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
77 {
78     NSLog(@"下载完毕");
79     //关闭连接,不再输入数据在文件中
80     [self.writeHandle closeFile];
81 }
82 /*
83  *请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)
84  */
85 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
86 {
87 }
88 @end

注意点:

(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];

iOS开发网络篇—文件下载(二·合理)

时间: 2024-09-30 05:28:15

iOS开发网络篇—文件下载(二·合理)的相关文章

iOS开发网络篇—文件下载(六·压缩和解压)

iOS开发网络篇—文件下载(六·压缩和解压) 一.完成文件下载 需求:完成文件下载 1.在本地服务器中,添加一个图片的压缩文件. 2.代码示例: 文件下载器代码: 头文件 1 // 2 // YYfileDownloader.h 3 // 01-文件的下载(不合理) 4 // 5 // Created by apple on 14-7-1. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import <Founda

iOS开发网络篇—文件下载(一&#183;不合理)

iOS开发网络篇—文件下载(一·不合理) 一.小文件下载 如果文件比较小,下载方式会比较多 直接用NSData的+ (id)dataWithContentsOfURL:(NSURL *)url; 利?NSURLConnection发送一个HTTP请求去下载 如果是下载图片,还可以利用SDWebImage框架 二.沙盒 1.在finder中,系统的一些文件(资源库)是隐藏的,可以通过在终端运行下图的代码,显示隐藏的文件. 显示隐藏系统文件: defaults write com.apple.fin

iOS开发网络篇—文件下载(五&#183;下载功能的封装)

iOS开发网络篇—文件下载(五·下载功能的封装) 一.简单说明 在前面几篇文章介绍下载代码的基础上,此文分析对下载功能进行封装. 通过之前的代码,我们发现仅仅是下载一个文件就需要写很长的代码,那么如果要下载多个文件,就需要写多份代码.在这里,我们把下载一个文件的代码进行封装.控制器只需要知道,下载哪个文件,下载到哪个路径就可以了. 在对下载的功能进行封装后,添加一个文件下载器,一个文件下载器只下载一个文件,封装后如果要下载多个文件的话,那么只需要创建多个文件下载器对象就可以进行控制和下载了. 二

iOS开发网络篇—文件下载(四&#183;暂停和恢复)

iOS开发网络篇—文件下载(四·暂停和恢复) 一.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小结 - 用于分隔 前面的数字表示起始字节数 后面的数组表示截止字节数,没

iOS开发网络篇—文件下载(三&#183;进度条)

一.实现下载文件进度控制 1.代码示例 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 @property(nonatomic,strong)NSMutableData *fileData; 5 @property(nonatomic,strong)NSFileHandle *writeHandle; 6 @property(nonatomic,assign)long long currentLen

iOS开发网络篇—使用ASI框架进行文件下载

原文  http://www.cnblogs.com/wendingding/p/3961681.html iOS开发网络篇—使用ASI框架进行文件下载 说明 :本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController () 5 6 7 @

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConnection的使用,如有需要了解NSURLConnection如何发送请求. 详细信息,请参考:http://www.cnblogs.com/wendingding/p/3813706.html 3)本文示例代码发送的请求均为http请求,已经对info.plist文件进行配置. 如何配置,请参考:

iOS开发网络篇—NSURLConnection基本使用

iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSUR

iOS开发网络篇—JSON数据的解析

iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim