H5加载ios本地图片资源
需求
需要加载一个在线的 Web,通过 JSBridge
获取到 Native 的资源路径,比如 file:///private/xxxx/xxx/xx.png
把它显示在 WebView
当中。 举个例子吧: 一个 HTML
的 Image
标签想显示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];
;
}
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 使用composer自动加载类文件
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- Flutter的ListView
- 接口|axios接口报错-参数类型错误解决
- iOS|iOS 笔记之_时间戳 + DES 加密