H5加载ios本地图片资源

需求 需要加载一个在线的 Web,通过 JSBridge获取到 Native 的资源路径,比如 file:///private/xxxx/xxx/xx.png 把它显示在 WebView 当中。 举个例子吧: 一个 HTMLImage 标签想显示iOS 沙盒里面的资源文件。


测试之后发现简单写本地路径的路子走不通。
查阅资料后发现通过 App 本地开启 Server 服务,Root 开在沙盒目录,然后通过将文件的 file协议 路径转换成本地服务路径,再给 H5 显示,经过测试完全可用。
第一步: 在 Podfile 写入(关于 GCDWebServer,一个轻量级的 AppServer 框架。)
pod "GCDWebServer", "~> 3.0"

pod install 集成后,在用到的地方
#import "GCDWebServer.h"GCDWebServer*_webServer = [[GCDWebServer alloc] init]; [_webServer addGETHandlerForBasePath:@"/" directoryPath:NSHomeDirectory() indexFilename:nil cacheAge:3600 allowRangeRequests:YES]; [_webServer startWithPort:80 bonjourName:nil]; // 比方说文件存在Library下有一个123的文件 //NSString *basePath = @"http://localhost/Library/Caches/hxyhd/emeeting/imageurl.png"; // 这样就可以访问到这个文件了,我只需要把我的文件名拼上localhost路径然后传给前端,他们拿到这个链接直接访问就可以拿到这个文件了

然后在H5中需要加载资源的标签里 赋值完整地址如http://localhost/Library/Caches/hxyhd/emeeting/imageurl.png 就可以了
Caches/hxyhd/emeeting/imageurl.png
问题记录
GCDWebServer不支持长链接,只要App退到后台,connect自动就stop,网页请求无法获得响应。
解决办法:
-1)开启支持后台模式:将GCDWebServer.m中的GCDWebServerOption_AutomaticallySuspendInBackground设置为NO;
【H5加载ios本地图片资源】-2)打开Background Modes;
-3)在AppDelegate.m写上这段代码
-(void)applicationDidEnterBackground:(UIApplication *)application{ [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:nil]; ; }

    推荐阅读