ASIHTTPRequest下载图片

发表:2013-03-02 19:41:17

1、介绍

ASIHTTPRequest功能很强大,主要特色如下:

  • l 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作

  • l 下载的数据,可存储到内存中或直接存储到磁盘中

  • l 能上传本地文件到服务端

  • l 可以方便的访问和操作请求和返回的Http头信息

  • l 可以获取到上传或下载的进度信息,为应用程序提供更好的体验

  • l 支持上传或下载队列,并且可获取队列的进度信息

  • l 支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在Keychain(Mac和iOS操作系统的密码管理系统)中

  • l 支持Cookie

  • l 当应用(iOS 4+)在后台运行时,请求可以继续运行

  • l 支持GZIP压缩数据

  • l 内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果

  • l ASIWebPageRequest –可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView /WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览

  • l 支持客户端证书

  • l 支持通过代理发起Http请求

  • l 支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制

  • l 支持断点续传

  • l 支持同步和异步请求


2、在项目中引入ASIHTTPRequest

1)首先下载ASIHTTPRequest,点击此处进行下载

2)将下载后,得到的class目录复制到Xcode项目中(只需要将文件夹拖放到项目根目录下即可,注意要选中“Copy items”复选项)。完成后,项目结构如下图所示。

3)然后依次根据以下步骤添加类库

选中项目-> 选中目标-> 跳转到“Build Phases”标签-> 展开“Link Binary With Libraries”分组->点击“+”添加类库


从列表中选择CFNetwork.framework,然后点击“Add”按钮。



按照相同的方法添加:SystemConfiguration.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib这几个类库。


3、使用ASIHTTPRequest

接下将使用ASIHTTPRequest异步下载图片。

1)AppDelegate.h文件


#import <UIKit/UIKit.h>
#import "ViewController1.h"
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>{
    UINavigationController *nav;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@property(strong,nonatomic) ViewController1 *v1;
@end



2)AppDelegate.m文件

- (void)dealloc
{
    [nav release];
    [_v1 release];
    [_window release];
    [_viewController release];
    [super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
                                           
    _v1=[[ViewController1 alloc] init];
    nav=[[UINavigationController alloc] init];
    [nav pushViewController:_v1 animated:YES];
    nav.toolbarHidden=NO;
    _window.rootViewController=nav;
    [self.window makeKeyAndVisible];
    return YES;
}


3)ViewController1.h文件

#import <UIKit/UIKit.h>
#import "ASIHTTPRequest.h"
@interface ViewController1 : UIViewController<ASIHTTPRequestDelegate>{
    UIActivityIndicatorView *activity_;
    ASIHTTPRequest *httpRequest_;
}
@end


4)ViewController1.m文件


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor=[UIColor whiteColor];
    UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn1.frame=CGRectMake(20, 50, 120, 50);
    [btn1 setTitle:@"HTTP下载" forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(btn1_click) forControlEvents:UIControlEventTouchDown];
    //将按钮添加到视图上
    [self.view addSubview:btn1];
    //定义活动指示器
    activity_ =[[UIActivityIndicatorView alloc] init];
    activity_.frame=CGRectMake(0, 0, 30, 30);
    activity_.hidesWhenStopped=NO;
    //定义活动指示器Item
    UIBarButtonItem *butItem=[[[UIBarButtonItem alloc] initWithCustomView:activity_] autorelease];
    NSArray *array=[[[NSArray alloc] initWithObjects:butItem, nil]autorelease];
    [self setToolbarItems:array];
                 
}
#pragma mark ----开始下载文件
-(void)btn1_click{
    NSURL *url=[NSURL URLWithString:@"http://www.beauty-soft.net/soft-css/t17.png"];
    //实例化ASIHTTPRequest
    httpRequest_=[ASIHTTPRequest requestWithURL:url];
    [httpRequest_ setDelegate:self];
    //开始异步下载
    [httpRequest_ startAsynchronous];
    //开始活动指示器动画
    [activity_ startAnimating];  
}
#pragma mark ---异步下载完成
- (void)requestFinished:(ASIHTTPRequest *)request{
    NSError *error=[request error];
    if (error) {
        UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"下载出错" message:@"出错了" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
    //创建图片,图片来源于ASIHTTPRequest对象(NSSData类型)
    UIImage *image=[UIImage imageWithData:[request responseData]];
    UIImageView *imageView=[[UIImageView alloc] initWithImage:image];
    imageView.frame=CGRectMake(0, 200, 220, 200);
    //将图片添加到视图上
    [self.view addSubview:imageView];
    //停止活动指示器动画
    [activity_ stopAnimating];
}


5)效果

相关文章