我有一个使用appcaching的离线Web应用程序。我需要提供大约10MB - 20MB的数据,它将保存(客户端)主要由PNG图像文件组成。操作如下:
以下是我目前对基于客户端的数据库"数据库的分析。处理二进制blob存储
注意:要查看数据:PNG的uri编码我创建了一个示例:http://jsbin.com/ivefak/1/edit
所需/有用/不需要的功能
IndexedDB实施
我目前的结果
最终结果发布在以下作为回答
PouchDB现在支持所有最新浏览器(IE,Chrome,Firefox,移动设备上的Chrome等)以及许多旧版浏览器的二进制blob。当我第一次这样做时,情况并非如此。
答案 0 :(得分:22)
结果PNG slippy maps的离线blob缓存
<强>测试强>
从网络服务器提取
<强>存储强>
<强>显示强>
<强>结果
答案 1 :(得分:4)
根据您的要求,我建议根据另外两个开发新的polyfill: FileSystem API to IndexedDB 和 IndexedDB到WebSQL - 是最好的选择。
前一个将支持在Chrome(FileSystem API)和Firefox(IndexedDB)中存储blob,而后者应该支持Android和iOS(WebSQL)。我们需要的是让这些填充剂一起工作,我想这并不难。
NB:由于我在网上找不到任何关于此的信息,您应该测试使用WebSQL polyfill存储blob是否适用于iOS和Android。它看起来应该可以工作:
var sql = ["CREATE TABLE", idbModules.util.quote(storeName), "(key BLOB", createOptions.autoIncrement ? ", inc INTEGER PRIMARY KEY AUTOINCREMENT" : "PRIMARY KEY", ", value BLOB)"].join(" ")
答案 2 :(得分:1)
几年前(不完全是石器时代),我使用了一个签名的java applet,它会查询服务器以同步/更新需求,从服务器下载适当的文件并将它们保存在用户的文件系统(不是数据库)上)。该解决方案可能适合您,但您需要有人编写applet并对其进行签名。对于数据库解决方案,这样的applet可以在合适的端口(例如,用于MySQL的3306)上使用localhost用于大多数数据库的jdbc。我相信applet标签在Html5中已弃用但它仍然有效。没有Android平板电脑的经验,因此无法对该部分发表评论。
答案 3 :(得分:0)
我有地图缓存examples(打开示例,发现区域和缩放,离线切换和发现的区域将可用)。
有map.js
- 离线图块的地图图层,storage.js
- 基于IndexedDb和WebSQL的存储实现(但这只是性能不佳的测试实现)。
有关20亿城市(Minsk)的尺寸的其他信息: