2017-02-15 70 views
0

我試圖更新文檔的數據,但不是文檔中現有的附加圖像,除非用戶選擇了新的。如何使用現有附件更新文檔?

如何複製現有圖像並將其放置在新文檔對象中?

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); 
}); 

}

回答

3

如果調用db.get(){attachments: false}那麼你可以重新插入您希望與任何非附件同一文檔的變化。這些附件將在JSON中標記爲stub:true,PouchDB將其解釋爲「aha,我可以檢查校驗和,而且我不需要重新插入整個附件blob。」

所以在你的情況下,只要做到db.get('id', {attachments: false})如果blob不變,然後重新插入同一個文件的變化。

+0

謝謝諾蘭!你非常感謝! –

+0

我發現這有助於: for(var k in data)doc [k] = data [k]; –

相關問題