iOS webView 加载文件 及 文件操作

本文介绍了如何使用iOS的webView加载各种附件,如.doc和.pdf等。首先获取文件路径并转换为URL,再由webView加载。还讨论了如何实现webView的缩放功能。此外,探讨了文件下载与缓存的实现,通过将文件保存到本地后再用webView打开。同时详细讲解了iOS的沙盒结构,包括Documents、Library/Caches和tmp目录的用途,并提供了获取沙盒路径和判断文件存在的方法。

这几天在做webView浏览附件的功能,研究了一下,正好可以记下来,用webView可以打开各种附件(.doc   .pdf   。。。)

    //加载路径的第一个方式
    NSString *path1 = [[NSBundle mainBundle] pathForResource:@"文件名" ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:path1];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.WebView loadRequest:request];




    //加载路径的第二个方式
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"文件名" withExtension:nil];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.WebView loadRequest:request];


 //加载路径的第三个方式    以二进制数据流加载
    //webview加载本地文件,可以使用加载数据的方式
    //第一个诶参数是一个NSData, 本地文件对应的数据
    //第二个参数是MIMEType
    //第三个参数是编码格式
    //相对地址,一般加载本地文件不使用,可以在指定的baseURL中查找相关文件。
    //以二进制数据的形式加载沙箱中的文件,
    // 加载.doc文件 TYPE为application/vnd.openxmlformats-officedocument.wordprocessingml.document
    NSData *data = [NSData dataWithContentsOfFile:path];
    [self.webView loadData:data MIMEType:@"application/vnd.openxmlformats-officedocument.wordprocessingml.document" textEncodingName:@"UTF-8" baseURL:nil];




步骤基本一样的,都是先获取文件所在路径,然后转化成URL,然后webView加载这个URL请求。

第三种方法有点特别就是他要获取文件的类型,这个可以让服务器一起发送过来。


添加:怎么让webView缩放:

    [self.WebView setScalesPageToFit:YES];



说完这个接下来说的是怎么把文件下载缓存好,我的思路就是先把文件下载到本地,然后用webView打开本地文件。

然后顺便研究了一下iOS 的文件操作:

默认情况下,iOS 的沙盒下都有三个文件夹,功能基本如下:

1、Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

2、Library:存储程序的默认设置或其它状态信息;Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。

3、tmp:提供一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。

获取沙盒的根路径:

 NSString *dirHome=NSHomeDirectory();      
 NSLog(@"app_home: %@",dirHome); 

获取document文件夹目录:

    //document文件目录
    NSString *pathDocument=[ NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ) objectAtIndex : 0 ];

获取library目录:

    //library文件目录
    NSString *pathLib=[ NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory , NSUserDomainMask , YES ) objectAtIndex : 0 ];

获取cache目录:

    cache文件目录
    NSString *pathCache=[ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ) objectAtIndex : 0 ];

获取temp目录:

    NSString *pathTemp = NSTemporaryDirectory();

获取了路径了,以上的文件夹都是默认存在的,接下来是自己创建自己的文件夹,文件夹创建,删除,读写操作等都需要 NSFileManager 这个单例类支持:

以temp目录为例,在temp目录下建立attachment文件夹:

 

    NSFileManager *fileManager = [NSFileManager defaultManager];
//temp文件目录
    NSString *path1 = NSTemporaryDirectory();
    path1=[path1 stringByAppendingPathComponent : @"attachment" ]; //拼接路径 temp/attachment
    [fileManager createDirectoryAtPath:path1 withIntermediateDirectories:YES attributes:nil error:nil]; //创建 文件夹
    path1=[path1 stringByAppendingPathComponent : @"我的文件.doc"];  //再次拼接路径
    [fileManager createFileAtPath:path1 contents:nil attributes:nil];  //创建  文件

判断文件是否存在:

[fileManager fileExistsAtPath:path1]



本demo是WKWebView的基本使用和交互 ,实现了原生调用js的方法、js调用原生的方法、通过拦截进行交互的方法;修改内容 加入 / /加载 不带参数 // NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // NSString * path = [paths objectAtIndex:0]; // path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; // NSURL *url = [NSURL URLWithString:[[NSString stringWithFormat:@"file://%@",path] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]] relativeToURL:[NSURL fileURLWithPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject]]; // [self.wkView loadFileURL:url allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; // 带参数 /* NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString * path = [paths objectAtIndex:0]; path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; NSURL * url = [NSURL fileURLWithPath:path isDirectory:NO]; NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; [queryItemArray addObject:[NSURLQueryItem queryItemWithName:@"version" value:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]]]; [urlComponents setQueryItems:queryItemArray]; [self.wkView loadFileURL:urlComponents.URL allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; */
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值