安卓资源收集我用 Linux程序员

iOS下载ZIP包并本地解压ZIP文件 加载HTML文件

2017-12-25  本文已影响108人  不会写代码的尬先生

项目需求是本地下载.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;
}

这个是我存放文件的路径

屏幕快照 2017-12-25 14.49.17.png

如图所示1号位置zipDownload文件夹是我在Caches目录下新建的,用来存放所有跟zip下载相关的文件。2号位置就是我用下载链接转成了唯一的文件名,用来存放此链接下载的相关文件。3号点就是解压后的文件,我们最终也是要在webview上显示HTML文件

而调用的时候只需去 下载链接转MD5的文件夹下找文件加载即可

        NSString *md5        = [self md5:_file];
        NSArray  *pathes     = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
        NSString *path       = [pathes objectAtIndex:0];
        NSString *finishPath = [NSString stringWithFormat:@"%@/zipDownload/%@",path,md5];//保存解压后文件的文件夹
        NSString *zipName    = [[_file lastPathComponent] stringByDeletingPathExtension];//获取下载链接里的文件名 即123sst文件夹
        NSString * webPath = [NSString stringWithFormat:@"%@/%@/index.html",finishPath,zipName];
        然后用webview加载webPath这个本地路径就可以显示了。

总体还是很简单的,最重要的是要做好本地文件的目录管理,欢迎宝贵意见。

以上。

上一篇 下一篇

猜你喜欢

热点阅读