ios自带NSURLConnection下载文件

//同步下载,同步请求的主要代码如下

- (IBAction)downLoad:(id)sender {

NSString *[email protected]"http://7jpnsh.com1.z0.glb.clouddn.com/TravelDemo.plist";//文件地址

NSURL *url=[NSURL URLWithString:urlAsString];

NSURLRequest *request=[NSURLRequest requestWithURL:url];

NSMutableData *error=nil;

NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

//文件保存目录

NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

NSLog(@"%@",cachePath);

NSString *filename=[cachePath stringByAppendingPathComponent:@"TravelDemo.plist"];

/*下载的数据*/

if (data!=nil) {

NSLog(@"下载成功");

if ([data writeToFile:filename atomically:YES]) {

NSLog(@"保存成功");

}else

{

NSLog(@"保存失败");

}

}else{

NSLog(@"%@",error);

}

}

//异步下载,异步请求的代码如下

- (IBAction)downLoad:(id)sender {

NSString *[email protected]"http://7jpnsh.com1.z0.glb.clouddn.com/TravelDemo.plist";

NSURL *url=[NSURL URLWithString:urlAsString];

NSURLRequest *request=[NSURLRequest requestWithURL:url];

NSMutableData*data=[[NSMutableData alloc]init];

self.connectionData=data;

//    [data release];

NSURLConnection *newConnection=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];

/**

connection 和conectionData 类型如下:

NSURLConnection *connection;

NSMutableData *connectionData;

**/

self.connection=newConnection;

if (self.connection!=nil) {

NSLog(@"成功创建连接");

}else{

NSLog(@"创建连接失败");

}

}

//异步下载代理方法

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

NSLog(@"出错");

NSLog(@"%@",error);

}

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

NSLog(@"Received data");

[self.connectionData appendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection*)connection{

NSLog(@"下载成功");

//文件保存目录

NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

NSLog(@"%@",cachePath);

NSString *filename=[cachePath stringByAppendingPathComponent:@"TravelDemo.plist"];

if ([self.connectionData writeToFile:filename atomically:YES]) {

NSLog(@"保存成功");

}else{

NSLog(@"保存失败");

}

}

补充:

connectionWithRequest需要delegate参数,通过一个delegate来做数据的下载以及Request的接受以及连接状态,此处delegate:self,所以需要本类实现一些方法,并且定义mData做数据的接受。

需要实现的方法:

1、获取返回状态、包头信息。

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

2、连接失败,包含失败。

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

3、接收数据

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

4、数据接收完毕

- (void)connectionDidFinishLoading:(NSURLConnection *)connection;

同步请求数据会造成主线程阻塞,通常在请求大数据或网络不畅时不建议使用。

从上面的代码可以看出,不管同步请求还是异步请求,建立通信的步骤基本是一样的:

1、创建NSURL

2、创建Request对象

3、创建NSURLConnection连接。

NSURLConnection创建成功后,就创建了一个http连接。异步请求和同步请求的区别是:创建了异步请求,用户可以做其他的操作,请求会在另一个线程执行,通信结果及过程会在回调函数中执行。同步请求则不同,需要请求结束用户才能做其他的操作。

时间: 2024-08-01 19:33:29

ios自带NSURLConnection下载文件的相关文章

Retrofit2.0使用PC蛋蛋源码搭建姊妹篇——带进度下载文件

Retrofit是PC蛋蛋源码搭建 dsluntan.com 目前最主流的网络框架了,它对网络请求几近完美的封装,大大降低了我们开发者的研发难度,缩短了研发周期.最近项目中遇到了下载视频和图片文件的需求(还有上传视频和图片的需求,请移步这篇博客),我第一反应是用retrofit做呀,so easy!产品接着说,要带下载进度条哦!我一想,retrofit好像并没有给我们提供显示下载进度的接口,哎呀,看来还是得自己个儿整整喽!接下来,我把自己实现Retrofit带进度下载文件的流程分享给大家.在de

iOS 简单的分段下载文件

首先自己写个请求数据的类 首先.h文件 #import <Foundation/Foundation.h> @interface Downloaders : NSObject<NSURLConnectionDataDelegate> @property (nonatomic, assign) long long beginpt;//下载的起始点 @property (nonatomic, assign) long long endpt;//下载的终点 @property(nonat

如何将IOS版本的更新下载文件指向到自己的服务器

针对那些使用企业签名但是没有发布到AppSotre的IOS版本APP自动更新问题解决方案: 在apicloud中是这样说明的: 因为要填写plist地址所以不能向安卓那样直接填写服务器文件地址,但是直接填写apicloud中的包又没有签名,所以我们用以下方式解决: 首先我们找到编译记录中的地址 例如:itms-services://?action=download-manifest&url=https://downloadpkg.apicloud.com:443/zip/ff/b2/XXXXX.

ios开发网络学习四:NSURLConnection大文件断点下载

#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @property (nonatomic, assign) NSInteger totalSize; @property (nonatomic, assign) NSInte

iOS开发网络篇—大文件的多线程断点下载(转)

http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要

iOS开发网络篇—大文件的多线程断点下载

iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要类如下: 完成的实现代码如下: 主控制器中的代码: 1 #import "YYViewControl

iOS开发网络请求——大文件的多线程断点下载

iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大小比较小导致传输所需时间少传输就快,因此不太容易影响用户体验,可用的技术就多.而大文件因为文件大小比较大导致传输时间长,因此就需要考虑到各种用户体验,比如避免在上传下载文件过程中阻塞主线程影响用户体验,就需要使用到多线程技术:为了给用户友好的进度提示,因此又需要开发中跟踪数据上传和下载数据的变化:为

iOS中利用NSURLSession进行文件断点下载

第一部分 知识储备 1.对NSURLSesiion的认识 NSURLSesiion是苹果在iOS7推出的一个类,它具备了NSURLConnection所具备的方法,同时也比它更强大.苹果推出它的目的大有取代NSURLConnection的趋势或者目的. 2.  NSURLSesiion的作用 实现对文件的下载与上传.在NSURLSesiion中,任何请求都可以被看做是一个任务.而NSURLSesiionData 有两个子类:NSURLSessionDownlaodTask实现文件下载和NSURL

ios开发网络学习五:MiMEType ,多线程下载文件思路,文件的压缩和解压缩

一:MiMEType:一般可以再百度上搜索到相应文件的MiMEType,或是利用c语言的api去获取文件的MiMEType : //对该文件发送一个异步请求,拿到文件的MIMEType - (void)MIMEType { //    NSString *file = @"file:///Users/文顶顶/Desktop/test.png"; [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[