[聚合文章] iOS本地解压ZIP文件 加载HTML文件

HTML 2017-12-25 18 阅读

项目需求是本地下载.zip的HTTP链接,解压后保存在沙盒,然后用Webview展示HTML,找了下第三方解压缩的库,都是用C写的,选用了ZipArchive,集成过程网上一堆教程,本人就不复述了。

下载的zip包和解压过的文件要存放沙盒里,必须要保持其唯一性,所以文件名用下载链接转MD5命名,下载完成删除zip包,下次下载只需检查是否有该链接的MD5命名的文件夹是否存在文件即可,上代码。

- (void)downloadZip{    NSString *zipUrl     = @"http://h5.orunapp.com/game/ljsp.zip?t=123";    NSURL    *url        = [NSURL URLWithString:zipUrl];    NSString *md5        = [self md5:zipUrl];//将下载链接转为md5 后面当做文件夹的名字    NSArray  *pathes     = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);    NSString *path       = [pathes objectAtIndex:0];//大文件放在沙盒下的Library/Caches    NSString *finishPath = [NSString stringWithFormat:@"%@/zipDownload/%@",path,md5];//保存解压后文件的文件夹的路径    NSString *zipPath    = [NSString stringWithFormat:@"%@/%@.zip",path,md5];//下载的zip包存放路径    BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:finishPath];    if (!isExist)    {//本地不存在文件 下载        dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);        dispatch_async(queue, ^{            NSError *error = nil;            NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];            if(!error)            {                [data writeToFile:zipPath options:0 error:nil];                //解压zip文件                ZipArchive *zip= [[ZipArchive alloc]init];                if([zip UnzipOpenFile:zipPath])                {//将解压缩的内容写到缓存目录中                    BOOL ret = [zip UnzipFileTo:finishPath overWrite:YES];                    if(!ret)                    {                        [zip UnzipCloseFile];                    }                    //解压完成 删除压缩包                    NSFileManager *fileManager = [NSFileManager defaultManager];                    [fileManager removeItemAtPath:zipPath error:nil];                }            }        });    }}- (NSString *)md5:(NSString *)str{    const char *cStr = [str UTF8String];    unsigned char digest[CC_MD5_DIGEST_LENGTH];    CC_MD5(cStr,(CC_LONG)strlen(cStr), digest);    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)    [output appendFormat:@"%02x", digest[i]];    return  output;}
                

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。