CouchDB, Kanso, Ошибка загрузки файла
Я пытаюсь прикрепить файлы к документам CouchDB при их создании.
Это HTML-код:
<form>
<input type="hidden" name="type" value="devtest"/>
<input type="file" name="_attachments" id="picture" accept="image/*" multiple/>
<button type="submit">Go</button>
</form>
Это код JS, обрабатывающий загрузку
$(document).on('submit', 'form', function(e) {
e.preventDefault();
var formdata = $(this).serializeObject(); // Provided by a pluign
$(this).find(':file').each(function(k,v) {
formdata[$(this).attr('name')] = $(this).val(); // Treating files
});
// Using the kanso db package
m.db.current().saveDoc(
formdata,
function(err,res) {
console.log('gna');
});
});
Это выдает следующее сообщение об ошибке 500:
{"error":"doc_validation","reason":"Bad special document member: _attachments"}
Я использую CouchDB 1.3.1 с кансо 0.2.2 и дБ 0.1.0.
1 ответ
Хорошо, я думаю, что я понял это. Два моих предположения оказались в корне неверными. Во-первых, вложения не могут быть загружены, используя только поле ввода с именем _attachments
, Во-вторых, CouchDB, похоже, не принимает файлы, если документ, к которому они должны быть прикреплены, уже существует. (Я могу ошибаться, но это не работает для меня.)
Вот решение, которое работает для меня:
$(document).on('submit', '#userctl form', function(e) {
e.preventDefault()
var data = $(this).serializeObject();
// Use the Kanso API to create a normal document without attachments
m.db.current().saveDoc(
data,
function(err,res) {
// Use ajaxSubmit provided by the jquery.forms plugin to submit the attachments
$('#userctl form').ajaxSubmit({
url: m.db.current().url + '/' + res.id,
data: {
_rev: res.rev // Provide a revision, otherwise the upload fails
},
success: function(res) {
console.log(res);
}
});
}
);
});
Этот подход требует следующих двух плагинов: