`
zjjzmw1
  • 浏览: 1365127 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

ios 异步下载文件。

    博客分类:
  • iOS
阅读更多

 

 

DownloadDemoDataRequest -----》ITTASIBaseDataRequest---》ITTBaseDataRequest

///文件下载请求,能同时下载多个。。。。

- (IBAction)startDownloadRequest:(id)sender

 

{

    

    dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_group_t queueGroup = dispatch_group_create();

    dispatch_group_async(queueGroup, aQueue, ^{

        

        

        NSString *filePath = ITTPathForCacheResource(@"download_test.zip");

        [DownloadDemoDataRequestrequestWithParameters:nil

                                     withIndicatorView:nil

                                     withCancelSubject:@"DownloadDemoDataRequestCancel"

                                          withFilePath:filePath

                                     onRequestFinished:^(ITTBaseDataRequest *request) {

                                         ITTDINFO(@"DownloadDemoDataRequest finished");

                                         _progressLabel.text = @"done";

                                     }

                                     onProgressChanged:^(ITTBaseDataRequest *request, float progress) {

                                         ITTDINFO(@"DownloadDemoDataRequest progress changed:%2.2f",progress);

                                         _progressLabel.text = [NSString stringWithFormat:@"%2.2f%@",progress*100,@"%"];

                                     }

         ];

        

        

        [DownloadDemoDataRequestrequestWithParameters:nil

                                     withIndicatorView:nil

                                     withCancelSubject:@"DownloadDemoDataRequestCancel"

                                          withFilePath:filePath

                                     onRequestFinished:^(ITTBaseDataRequest *request) {

                                         ITTDINFO(@"DownloadDemoDataRequest finished");

                                         self.firstLabel.text = @"done";

                                     }

                                     onProgressChanged:^(ITTBaseDataRequest *request, float progress) {

                                         ITTDINFO(@"DownloadDemoDataRequest progress changed:%2.2f",progress);

                                         self.firstLabel.text = [NSString stringWithFormat:@"%2.2f%@",progress*100,@"%"];

                                     }

         ];

        

        

        [DownloadDemoDataRequestrequestWithParameters:nil

                                     withIndicatorView:nil

                                     withCancelSubject:@"DownloadDemoDataRequestCancel"

                                          withFilePath:filePath

                                     onRequestFinished:^(ITTBaseDataRequest *request) {

                                         ITTDINFO(@"DownloadDemoDataRequest finished");

                                         self.secondLabel.text = @"done";

                                     }

                                     onProgressChanged:^(ITTBaseDataRequest *request, float progress) {

                                         ITTDINFO(@"DownloadDemoDataRequest progress changed:%2.2f",progress);

                                         self.secondLabel.text = [NSString stringWithFormat:@"%2.2f%@",progress*100,@"%"];

                                     }

         ];

 

        

        

        

        

        

        

    });

    //任务5

//    dispatch_group_async(queueGroup, aQueue, ^{

//        

//        

//        

//    });

 

    

 

DownloadDemoDataRequest.m 里面。。。。。

#import "DownloadDemoDataRequest.h"

#import "ITTGobalPaths.h"

#import "ZipFile.h"

#import "ZipException.h"

#import "FileInZipInfo.h"

#import "ZipWriteStream.h"

#import "ZipReadStream.h"

#import "CommonUtils.h"

#import "NSDate+ITTAdditions.h"

 

@implementation DownloadDemoDataRequest

 

- (NSString*)getRequestUrl

{

    NSString *dateStr = [[NSDate date] stringWithFormat:@"yyyy-MM-dd"];

return [NSStringstringWithFormat:@"http://cn.wsj.com/ipad/plist/%@.zip",dateStr];

}

 

- (BOOL)processDownloadFile

{

    @autoreleasepool {

BOOL success = YES;

@try {

ZipFile *unzipFile= [[ZipFilealloc] initWithFileName:_filePathmode:ZipFileModeUnzip];

NSArray *infos= [unzipFile listFileInZipInfos];

[unzipFile goToFirstFileInZip];

        int index = 0;

        do{

            ZipReadStream *read= [unzipFile readCurrentFileInZip];

            FileInZipInfo *info = infos[index];

            NSString *path = ITTPathForCacheResource(@"download_unziped");;

            if (info.size == 0) {

                //is folder

                [CommonUtils createDirectorysAtPath:path];

            }else{

                NSString *directorPath = [CommonUtils getDirectoryPathByFilePath:path];

                [CommonUtils createDirectorysAtPath:directorPath];

                NSMutableData *fileData= [NSMutableData data];

                BOOL isEndofFile = NO;

                while (!isEndofFile) {

                    NSMutableData *data= [[NSMutableData alloc] initWithLength:256];

                    int bytesRead= [read readDataWithBuffer:data];

                    if (bytesRead <= 0) {

                        isEndofFile = YES;

                    }else{

                        [fileData appendData:data];

                    }

                }

                [fileData writeToFile:path atomically:YES];

                //ITTDINFO(@"write to file [%d]:%@", success,path);

            }

            

            [read finishedReading];

            index ++;

        }while ([unzipFile goToNextFileInZip]);

[unzipFile close];

        ITTDINFO(@"zip file unzipped...............");

} @catch (ZipException *ze) {

ITTDERROR(@"ZipException caught: %d - %@", ze.error, [ze reason]);

        success = NO;

} @catch (id e) {

ITTDERROR(@"Exception caught: %@ - %@", [[e class] description], [e description]);

        success = NO;

}

    return success;

    }

}

 

 

@end

分享到:
评论

相关推荐

    ios-NSURLSession 异步下载 断点续传.zip

    使用技术: 基于iOS最新的网络请NSURLSession 封装下载框架 目前功能: (1)多线程下载,可自定义并发数 (2)支持断点续传 (3)支持取消下载任务 (4)支持暂停下载后app重新启动可继续下载 (5)支持状态栏网络...

    iOS异步队列下载

    总之,iOS异步队列下载利用ASIHTTPRequest库实现了高效、可控的多任务下载,不仅提高了下载效率,还确保了良好的用户交互体验。理解和掌握这些知识点对于iOS开发者来说至关重要,特别是对于那些需要处理大量网络请求...

    IOS 多线程异步下载,断点续传

    总结,iOS应用在进行文件下载时,使用多线程异步下载可以提升用户体验,结合断点续传技术,即使在网络不稳定的情况下也能保证下载的连续性。同时,通过显示进度条和字节数,可以让用户清晰地了解下载状态。最后,...

    iOS异步图片加载库..zip

    本项目名为“iOS异步图片加载库”,显然是一个针对iOS平台的开源项目,用于帮助开发者实现高效、流畅的图片加载功能。 这个库的核心概念是利用GCD(Grand Central Dispatch)或者NSOperationQueue来处理后台任务,...

    iOS异步加载图片 (需要至少12个字的名称,过分!)

    标题中的"iOS异步加载图片"暗示我们讨论的是如何在iOS应用中避免UI阻塞,通过后台线程加载图片资源,使得界面始终保持流畅。在描述中提到的“上次忘记初始化,犯一低级错误”,这可能是指在使用图片加载库或者自定义...

    iOS从网络异步加载图片

    IconDownloader是一个用于异步下载和缓存图片的工具,它可以避免UI卡顿,同时确保图片资源的高效利用。 使用IconDownloader,你需要先创建一个下载任务,指定图片URL,然后在回调中处理下载完成的图片。这个过程...

    ios异步加载图片

    以下是对"ios异步加载图片"这一主题的详细阐述: 1. **异步加载原理**: 异步加载是将耗时任务放在后台线程执行,不影响主线程对UI的更新。在iOS中,通常使用GCD(Grand Central Dispatch)或者NSOperationQueue来...

    iOS封装文件下载

    在iOS开发中,文件下载是一项常见的任务,尤其对于那些需要从服务器获取大量数据或资源的应用来说,例如游戏、媒体应用或者任何需要更新内容的应用。本文将深入探讨如何在iOS中封装文件下载,以提高代码的可维护性和...

    IOS文件下载代码

    在iOS开发中,文件下载是常见的操作,尤其在App需要获取网络资源时。本文将详细介绍如何在iOS中实现文件下载,以"FFDownloadManager"为例,这是一个可能的自定义下载管理器,它可以帮助我们高效、稳定地处理文件下载...

    iOS用ASIHTTP框架异步队列下载图片显示进度条

    在iOS开发中,为了提升用户体验,我们经常需要在后台异步下载图片并实时更新下载进度。ASIHTTPRequest是一个经典的网络请求库,它提供了丰富的功能来帮助开发者处理这些需求。本篇文章将详细讲解如何利用...

    ios-AFNetworking的下载、请求、上传.zip

    综上所述,AFNetworking是iOS开发中的必备工具,它简化了HTTP请求、文件下载和上传的操作,且具有高度可定制性。通过研究提供的CocoaPodsDemo,你可以更深入地理解AFNetworking的工作原理及其在实际项目中的应用。

    异步下载zip

    在iOS应用开发中,异步下载是一项常见的任务,特别是在Xcode...通过URLSession和适当的代理方法,我们可以实现高效、可靠的文件下载功能。在实际项目中,记得根据具体需求进行定制和优化,以确保最佳的性能和用户体验。

    iOS socket通讯用以上传以及下载文件

    文件下载时,同样需要接收数据并写入文件。可以创建一个临时文件,每次接收到数据后追加到该文件。为了进度显示,可以在`socket:didReadData:withTag:`代理方法中更新下载进度。 6. **多线程支持**: ...

    IOS通过URL下载保存图片

    总的来说,"IOS通过URL下载保存图片"这个话题涵盖了网络请求(URLSession)、文件操作(FileManager)、用户界面更新(UIImage,UIImageView)等核心iOS开发技能。理解并熟练掌握这些知识点,对于开发高质量的iOS...

    IOS解析XML文件

    在iOS开发中,解析XML文件是一项常见的任务,特别是在与服务器进行数据交互时。XML(Extensible Markup Language)是一种用于标记数据的语言,具有良好的结构性和可读性,使得它成为网络数据传输的常用格式。本篇...

    iOS异步下载图片实例代码

    写在前面 在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求。尽管有很多现存的第三方...•下载管理类负责开启下载线程和各种缓存(内存+文件),下载完成后

    ios-文件下载(NSURLSession).zip

    在iOS开发中,文件下载是一项常见的任务,尤其是在网络通信丰富的应用程序中。`NSURLSession`是苹果提供的一个强大且灵活的框架,用于处理HTTP和其他基于TCP的网络协议。在本教程中,我们将深入探讨如何使用`...

    ios在线下载

    当文件下载完成后,会自动保存到指定路径,并通过 delegate 方法通知应用。 6. **进度显示**:在下载过程中,为了提升用户体验,通常会展示下载进度。URLSession的downloadTask提供了监控下载进度的方法,开发者...

    ios 读取文件或文件夹大小的几种方法

    在iOS开发中,读取文件或文件夹的大小是常见的需求,这可以帮助我们了解应用程序的存储占用、管理用户数据或者优化资源加载。本篇将详细讲解三种不同的方法,以实现这一功能。 一、使用FileManager iOS系统提供的`...

Global site tag (gtag.js) - Google Analytics