如何使用现有附件更新文档?

时间:2017-02-15 22:17:50

标签: pouchdb

我正在尝试更新文档的数据,但不会更新文档中现有的附加图像,除非用户选择了新图像。

如何复制现有图像并将其放在新文档对象中?

function updateInspection() {

console.log('updateInspection started');

var data = $('#inspectionForm').serializeArray().reduce(function(obj, item) {
    obj[item.name] = item.value;
    return obj;
}, {});

console.log(' docID: ' + data._id);
console.log(' docREV: ' + data._rev);

if (!$('input[type=file]')[0].files[0]) {

    console.log(' Get doc Attachment First!');

    local_db.get(data._id,{attachments: true}, function(err, doc) { 
       if (err) { 
          return console.log(err); 
       } else { 

          console.log('doc._attachments: ' +doc._attachments.cover_image.content_type);

          data._attachments = doc._attachments; // THIS IS NOT WORKING
       } 
    });
}

if ($('input[type=file]')[0].files[0]) {

    console.log(' Add/Update Cover Image Attachment!');

    cover_image_name = $('input[type=file]')[0].files[0].name;
    console.log(' cover_image_name: ' + cover_image_name);
    var input = document.querySelector('input[type=file]'); 
    var file = $('#coverImage').prop('files')[0];

    data[ "_attachments" ] = {
      "cover_image": {
        "content_type": "image/jpg",
        "data": file
      }
    };
}

local_db.put(data).then(function (result) {
  // handle result
  console.log('Successfully posted '+result.id);
  console.log('New_rev '+result.rev);
  $("input#_rev").val(result.rev);

}).catch(function (err) {
  console.log(err);
});

}

1 个答案:

答案 0 :(得分:3)

如果您使用db.get()致电{attachments: false},那么您可以重新插入同一文档,并附上您想要的任何非附件更改。附件将在JSON中标记为stub:true,PouchDB将其解释为“aha,我只需检查校验和,我不需要重新插入整个附件blob。”

因此,在您的情况下,如果blob未更改,则执行db.get('id', {attachments: false}),然后使用更改重新插入相同的文档。