您可以查看 jIO ( website / github ),它允许您跨多个存储存储和自动同步 JSON 文档。
因此,您的用户可以从您的 webDav、xWiki、S3 或任何存储中提取 JSON(“任何”需要您编写自己的 jIO 连接器)。
文档将存储在 users 中localStorage
。jIO 还提供了一个complexQueries
模块,它允许您查询存储的文档,因此您将拥有一个同步的、轻量级的、仅限 javascript 的“数据库”模型。
PDF 也可以在客户端生成(例如使用jspdf),但是将文件保存在 JSON 中应该使它们更易于移植到不同的格式(例如在客户端上显示 JSON 数据的 HTML 页面)。
编辑:
我不完全知道您的要求是什么,但据我了解,我将设置一个复制修订存储,并在其中storage_list
添加本地存储和我的“远程数据存储”(比如 webDav),我将在其中保存我的可下载数据.
因此,在初始化您的应用程序时,您将执行以下操作:
var myReaderStorage = JIO.newJio({
"type": "replicaterevision",
"storage_list": [
{
"type": "revision",
"sub_storage":
{
// this will your users local storage
"type": "local",
"username": <string>,
"application_name": <string>
}
},
{
"type": "revision",
"sub_storage": {
"type": "dav",
"username": <string>,
"password": <string>,
"url": <string>
}
}
]
});
这会将您的用户本地存储与您的 webDav 存储“连接”,并设置一个修订系统。例如:
- 用户下载 app = new JIO 将被初始化。
- 如果你
GET
有一个文件,系统会尝试从本地存储(如果有)或远程存储中拉取。
- 一旦找到,所有存储将被同步,因此
file-A_version1
将在本地和 webdav 上可用
- 用户现在可以编辑文件(如果您允许),创建
file-A_version2
- 调用
PUT
将保存到 localstorage 和 webDav
- 用户从桌面调用应用程序 = 再次初始化应用程序
GET
将尝试从 localStorage(仍然为空)或远程拉取。
file-A_version2
将从 webDav 加载并存储在 localStorage 中
这只是一个粗略的设置,但您应该明白这一点。你可以这样继续:
- 智能手机离线。用户在桌面创建上更改文件
file-A_version3
file-A_version3
与 webDav 同步
- 下次用户通过智能手机访问应用程序时,系统会检测到冲突(
file-A_version1
在智能手机上,file-A_version3
在 webDav 上)。这两个版本都将在智能手机上提供,您可以编写自己的逻辑来删除哪个版本REMOVE
如果您有任何问题,请告诉我。