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;

-2)打开Background Modes;

-3)在AppDelegate.m写上这段代码

-(void)applicationDidEnterBackground:(UIApplication *)application{
  [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:nil];;
}

你可能感兴趣的:(H5加载ios本地图片资源)