美文网首页
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