向 PouchDB 文档添加附加附件
Adding additional attachment to PouchDB document
我试图在我的电子应用程序中向我在 PouchDB 中的文档添加附加附件。但是我只能添加最后一个附件,旧的附件被覆盖了。
以下数据未以新增文件方式修改:
_attachments":{"someFile.jpg":{"content_type":"image/jpeg","revpos":5,"length":38718,"digest":"md5-X+MOUwdHmNeORSl6xdtZUg=="}
我是否应该先阅读文档并通过以下方法使用多个附件重新创建它添加额外的文件:
db.put({
_id: 'mydoc',
_attachments: {
'myattachment1.txt': {
content_type: 'text/plain',
data: blob1
},
'myattachment2.txt': {
content_type: 'text/plain',
data: blob2
},
'myattachment3.txt': {
content_type: 'text/plain',
data: blob3
},
// etc.
}
});
?
下面你可以看到我尝试运行检查我是否可以将两个附件添加到一个文档的部分代码(实际上我尝试使用同一个文件两次以简化测试):
pdb.putAttachment(id, name, rev, file, type).then(function (result) {
console.log("att saved:");
console.log(result);
}).catch(function (err) {
console.log(err);
});
var newFileName = "new" + name;
pdb.putAttachment(id, newFileName, rev, file, type).then(function (result) {
console.log("att saved 2:");
console.log(result);
}).catch(function (err) {
console.log(err);
});
结果是:
Object {ok: true, id: "1489351796004", rev: "28-a4c41eff6fbdde8a722a920c9d5a1390"}
id
:
"1489351796004"
ok
:
true
rev
:
"28-a4c41eff6fbdde8a722a920c9d5a1390"
CustomPouchError {status: 409, name: "conflict", message: "Document update conflict", error: true, id: "1489351796004"}
error
:
true
id
:
"1489351796004"
message
:
"Document update conflict"
name
:
"conflict"
status
:
409
看来我有点不明白,或者我不知道如何正确使用 putAttachment。
我还要添加 sqlite 中数据的样子(按顺序 table,json 行):
{...,"_attachments":{"testPicture.jpg":{"content_type":"image/jpeg","revpos":34,"length":357677,"digest":"md5-Bjqd6RHsvlCsDkBKe0r7bg=="}}}
这里的问题是如何向结构添加另一个附件。不知何故我无法通过 putAttachment
实现
put
replaces the document. If you want to add an attachment to an existing document without overwriting its contents you should use putAttachment
.
你的问题,尤其是代码很难读懂,所以错误不容易发现:你没有等待 promise 得到解决。当您使用修订版 1 更新文档时,您必须等待结果,从那里读取修订版,然后才写第二个附件。这将是我(未经测试)对您的代码的看法:
pdb.putAttachment(id, name, rev, file, type)
.then(function (result) {
// Use the new revision here:
return putAttachment(id, newFileName, result.rev, file, type);
}).then(function (result) {
console.log(result);
}).catch(function (err) {
console.log(err);
});
如果编码正确,一次添加两个附件是可能的,但你只能靠自己了。我建议您不要这样做——最好使用 PouchDB 提供的抽象。
也不要过多分析底层数据结构,因为根据使用的存储适配器不同,数据存储可能会有很大差异。不同的适配器如何存储它们的数据非常有趣,但永远不要依赖你发现的任何东西——数据格式可能会改变。
我试图在我的电子应用程序中向我在 PouchDB 中的文档添加附加附件。但是我只能添加最后一个附件,旧的附件被覆盖了。
以下数据未以新增文件方式修改:
_attachments":{"someFile.jpg":{"content_type":"image/jpeg","revpos":5,"length":38718,"digest":"md5-X+MOUwdHmNeORSl6xdtZUg=="}
我是否应该先阅读文档并通过以下方法使用多个附件重新创建它添加额外的文件:
db.put({
_id: 'mydoc',
_attachments: {
'myattachment1.txt': {
content_type: 'text/plain',
data: blob1
},
'myattachment2.txt': {
content_type: 'text/plain',
data: blob2
},
'myattachment3.txt': {
content_type: 'text/plain',
data: blob3
},
// etc.
}
});
?
下面你可以看到我尝试运行检查我是否可以将两个附件添加到一个文档的部分代码(实际上我尝试使用同一个文件两次以简化测试):
pdb.putAttachment(id, name, rev, file, type).then(function (result) {
console.log("att saved:");
console.log(result);
}).catch(function (err) {
console.log(err);
});
var newFileName = "new" + name;
pdb.putAttachment(id, newFileName, rev, file, type).then(function (result) {
console.log("att saved 2:");
console.log(result);
}).catch(function (err) {
console.log(err);
});
结果是:
Object {ok: true, id: "1489351796004", rev: "28-a4c41eff6fbdde8a722a920c9d5a1390"}
id
:
"1489351796004"
ok
:
true
rev
:
"28-a4c41eff6fbdde8a722a920c9d5a1390"
CustomPouchError {status: 409, name: "conflict", message: "Document update conflict", error: true, id: "1489351796004"}
error
:
true
id
:
"1489351796004"
message
:
"Document update conflict"
name
:
"conflict"
status
:
409
看来我有点不明白,或者我不知道如何正确使用 putAttachment。
我还要添加 sqlite 中数据的样子(按顺序 table,json 行):
{...,"_attachments":{"testPicture.jpg":{"content_type":"image/jpeg","revpos":34,"length":357677,"digest":"md5-Bjqd6RHsvlCsDkBKe0r7bg=="}}}
这里的问题是如何向结构添加另一个附件。不知何故我无法通过 putAttachment
实现put
replaces the document. If you want to add an attachment to an existing document without overwriting its contents you should use putAttachment
.
你的问题,尤其是代码很难读懂,所以错误不容易发现:你没有等待 promise 得到解决。当您使用修订版 1 更新文档时,您必须等待结果,从那里读取修订版,然后才写第二个附件。这将是我(未经测试)对您的代码的看法:
pdb.putAttachment(id, name, rev, file, type)
.then(function (result) {
// Use the new revision here:
return putAttachment(id, newFileName, result.rev, file, type);
}).then(function (result) {
console.log(result);
}).catch(function (err) {
console.log(err);
});
如果编码正确,一次添加两个附件是可能的,但你只能靠自己了。我建议您不要这样做——最好使用 PouchDB 提供的抽象。
也不要过多分析底层数据结构,因为根据使用的存储适配器不同,数据存储可能会有很大差异。不同的适配器如何存储它们的数据非常有趣,但永远不要依赖你发现的任何东西——数据格式可能会改变。