美文网首页
iOS下载zip 解压 加载其中的html(附带搭建简易本地测试

iOS下载zip 解压 加载其中的html(附带搭建简易本地测试

作者: 有理想有暴富的小青年 | 来源:发表于2018-03-20 13:59 被阅读306次

    1、有远程zip下载链接的可以跳过这一步(搭建本地简易服务器)

    简书链接:https://www.jianshu.com/p/ad0833f4845a

    2、 做前期准备  导入需要的库文件  

       1) AFNetworking 和SSZipArchive(一个加载库 一个解压库 )

    podfile:

    platform :ios,'8.0'

    target 'your  project name' do

    pod 'AFNetworking'

    pod 'SSZipArchive'

    end

    没有pods 的看这里 cocoapods安装以及使用 https://www.jianshu.com/p/6e71fbeb71b7

    3、上代码

    1)@property(nonatomic,copy)NSString * urlstr;

    @property(nonatomic,copy)NSString * decodestr;

    @property(nonatomic,strong)WKWebView * webView;

    下载zip代码 

    -(void)rquestZipArchivePath:(NSString*)pathUrl andHtmlVersion:(NSString*)version{

        //远程地址

        NSURL*URL = [NSURLURLWithString:pathUrl];

        //默认配置

        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

        AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

        //请求

        NSURLRequest *request = [NSURLRequest requestWithURL:URL];

        NSURLSessionDownloadTask* downloadTask =[managerdownloadTaskWithRequest:requestprogress:^(NSProgress*_NonnulldownloadProgress) {

            doublecurr=(double)downloadProgress.completedUnitCount;

            doubletotal=(double)downloadProgress.totalUnitCount;

            NSLog(@"下载进度==%.2f",curr/total);

        }destination:^NSURL*_Nonnull(NSURL*_NonnulltargetPath,NSURLResponse*_Nonnullresponse) {

            //- block的返回值, 要求返回一个URL, 返回的这个URL就是文件的位置的路径

            NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

            //再次之前先删除本地文件夹里面相同的文件夹

            NSFileManager*fileManager = [NSFileManagerdefaultManager];

            NSArray*contents = [fileManagercontentsOfDirectoryAtPath:cachesPatherror:NULL];

            NSEnumerator*e = [contentsobjectEnumerator];

            NSString*filename;

            NSString*extension =@"zip";

            while((filename = [enextObject])) {

                if([[filenamepathExtension]isEqualToString:extension]) {

                    [fileManagerremoveItemAtPath:[cachesPathstringByAppendingPathComponent:filename]error:NULL];

                }

            }

            NSString*path = [cachesPathstringByAppendingPathComponent:response.suggestedFilename];

            return[NSURLfileURLWithPath:path];

        }completionHandler:^(NSURLResponse*_Nonnullresponse,NSURL*_NullablefilePath,NSError*_Nullableerror) {

            //设置下载完成操作

            // filePath就是你下载文件的位置,你可以解压,也可以直接拿来使用

            NSString*htmlFilePath = [filePathpath];// 将NSURL转成NSString

            NSArray*documentArray =  NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

            NSString *path = [[documentArray lastObject] stringByAppendingPathComponent:@"Preferences"];

            NSFileManager*fileManager = [NSFileManagerdefaultManager];

            [fileManagerremoveItemAtPath:[NSString stringWithFormat:@"%@/html",path] error:nil];

            self.urlstr=htmlFilePath;

            self.decodestr=path;

        }];

        [downloadTaskresume];

    }

    解压代码

    - (void)releaseZipFilesWithUnzipFileAtPath:(NSString*)zipPath Destination:(NSString*)unzipPath{

        //    NSLog(@"%@,%@",zipPath,unzipPath);

        NSError*error;

        if ([SSZipArchive unzipFileAtPath:zipPath toDestination:unzipPath overwrite:YES password:nil error:&error delegate:self]) {

            NSLog(@"success");

        }

        else{

            NSLog(@"%@",error);

        }

      // 压缩包的全路径(包括文件名)

    //    NSString *destinationPath = zipPath;

        // 目标路径,

        NSString*destinationPath = unzipPath;

        // 解压, 返回值代表是否解压完成

        Booleanb= [SSZipArchiveunzipFileAtPath:zipPathtoDestination:destinationPath];

    //    ------------ 带回调的解压    ------------

        Booleanb1 = [SSZipArchiveunzipFileAtPath:zipPathtoDestination:destinationPathprogressHandler:^(NSString*_Nonnullentry,unz_file_infozipInfo,longentryNumber,longtotal) {

            // entry : 解压出来的文件名

            //entryNumber : 第几个, 从1开始

            //total : 总共几个

            NSLog(@"progressHandler:%@, entryNumber:%ld, total:%ld  names:%@", entry, entryNumber, total,destinationPath);

        }completionHandler:^(NSString*_Nonnullpath,BOOLsucceeded,NSError*_Nullableerror) {

            //path : 被解压的压缩吧全路径

            //succeeded 是否成功

            // error 错误信息

            NSLog(@"completionHandler:%@, , succeeded:%d, error:%@", path, succeeded, error);

        }];

    }

    #pragma mark - SSZipArchiveDelegate

    - (void)zipArchiveWillUnzipArchiveAtPath:(NSString*)path zipInfo:(unz_global_info)zipInfo {

        NSLog(@"将要解压%d",zipInfo.number_entry);

    }

    - (void)zipArchiveDidUnzipArchiveAtPath:(NSString*)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString*)unzippedPat uniqueId:(NSString*)uniqueId {

        NSLog(@"解压完成!");

    }

    展示加载zip中的网页

    //    /初始化一个WKWebViewConfiguration对象

        WKWebViewConfiguration *config = [WKWebViewConfiguration new];

        //初始化偏好设置属性:preferences

        config.preferences = [WKPreferences new];

        //The minimum font size in points default is 0;

        config.preferences.minimumFontSize = 10;

        //是否支持JavaScript

        config.preferences.javaScriptEnabled = YES;

        //不通过用户交互,是否可以打开窗口

        config.preferences.javaScriptCanOpenWindowsAutomatically = YES;

        self.webView=[[WKWebView alloc]initWithFrame:self.view.bounds configuration:config];

        _webView.navigationDelegate=self;

        _webView.UIDelegate = self;

    //

        NSArray *documentArray = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

        NSString *path = [[documentArray lastObject] stringByAppendingPathComponent:@"Preferences"];

        NSURL *url=[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/dist/index.html",path]];

        NSString*urlStr = [urlabsoluteString];

        urlStr = [urlStrstringByReplacingOccurrencesOfString:@"file://" withString:@""];

       [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:urlStr]]];

        //uiwebview和wkwebview加载方式略有不同 wkwebview用loadrequest方法不能加载本地html  但是用以上方法可以 应该是后面的 fileURLWithPath起作用了

        [self.viewaddSubview:self.webView];

    附demo地址  https://github.com/fc931127/xaizaizip.git

    相关文章

      网友评论

          本文标题:iOS下载zip 解压 加载其中的html(附带搭建简易本地测试

          本文链接:https://www.haomeiwen.com/subject/bsnpqftx.html