zoukankan      html  css  js  c++  java
  • 使用ASI队列请求,下载图片

    参考开发者指南那份Demo,效果如图,ASI强大的功能使用异步队列下载更为简便

    代码如下:

    //开始队列
    - (IBAction)fetchThreeImages:(id)sender
    {
        // UI清空
        [imageView1 setImage:nil];
        [imageView2 setImage:nil];
        [imageView3 setImage:nil];
        self.progressIndicator.progress = 0.0;
        self.imageProgressIndicator1.progress = 0.0;
        self.imageProgressIndicator2.progress = 0.0;
        self.imageProgressIndicator3.progress = 0.0;
        
        // 初始化队列
        if (!networkQueue) {
            networkQueue = [[ASINetworkQueue alloc] init];    
            // 设置最大并发数 默认为-1 无限制
            [networkQueue setMaxConcurrentOperationCount:10];
        }
        failed = NO;
        // 重制队列
        [networkQueue reset];
        // 设置队列的进度条
        [networkQueue setDownloadProgressDelegate:progressIndicator];
        // 设置完成方法
        [networkQueue setRequestDidFinishSelector:@selector(imageFetchComplete:)];
        // 设置错误方法
        [networkQueue setRequestDidFailSelector:@selector(imageFetchFailed:)];
        // 显示精确进度
        [networkQueue setShowAccurateProgress:YES];
        
        [networkQueue setDelegate:self];
        
        // 初始化请求
        
        ASIHTTPRequest *request;
        // 设置请求URL
        request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/images/small-image.jpg"]];
        // 设置下载的目标路径
        [request setDownloadDestinationPath:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"girl.png"]];
        // 设置进度条
        [request setDownloadProgressDelegate:imageProgressIndicator1];
        // 自定义用户信息
        [request setUserInfo:[NSDictionary dictionaryWithObject:@"request1" forKey:@"name"]];
        // 将请求加入队列
        [networkQueue addOperation:request];
        
        // 同上
        request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/images/medium-image.jpg"]];
        [request setDownloadDestinationPath:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"2.png"]];
        [request setDownloadProgressDelegate:imageProgressIndicator2];
        [request setUserInfo:[NSDictionary dictionaryWithObject:@"request2" forKey:@"name"]];
        [networkQueue addOperation:request];
        
        // 同上
        request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/images/large-image.jpg"]];
        [request setDownloadDestinationPath:[[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"3.png"]];
        [request setDownloadProgressDelegate:imageProgressIndicator3];
        [request setUserInfo:[NSDictionary dictionaryWithObject:@"request3" forKey:@"name"]];
        [networkQueue addOperation:request];
        
        // 启动队列
        [networkQueue go];
    }

    // 请求成功后更新UI
    - (void)imageFetchComplete:(ASIHTTPRequest *)request
    {
        // 从下载路径里读取文件
        UIImage *img = [UIImage imageWithContentsOfFile:[request downloadDestinationPath]];
        NSString *name = [[request userInfo] valueForKey:@"name"];
        
        if (img) {
            if ([name isEqualToString:@"request1"]) {
                [imageView1 setImage:img];
            }else if([name isEqualToString:@"request2"]){
                [imageView2 setImage:img];
            }else if([name isEqualToString:@"request3"]){
                [imageView3 setImage:img];
            }
        }
        
    }
    
    // 请求失败后调用
    - (void)imageFetchFailed:(ASIHTTPRequest *)request
    {
        if (!failed) {
            if ([[request error] domain] != NetworkRequestErrorDomain || [[request error] code] != ASIRequestCancelledErrorType) {
                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Download failed" message:@"Failed to download images" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alertView show];
            }
            failed = YES;
        }
    }

  • 相关阅读:
    conan本地安装包
    Python PIL 怎么知道写入图片格式的kb大小
    怎么对C++枚举(不是类)里面的东西进行随机
    当双方Visual studio windows SDK不一样的时候的解决办法
    不小心使用vcpkg之后再使用conan,一直报链接错误
    关于obj文件的理解
    卸载VS2015之后,安装VS2017出错
    性状、生成器、闭包、OPcache【Modern PHP】
    docker容器修改hosts文件,重启失效问题解决
    微信公众号-模板消息通用接口封装
  • 原文地址:https://www.cnblogs.com/leeAsia/p/3372709.html
Copyright © 2011-2022 走看看