送信時にcouchdbドキュメントを作成し、ドキュメントに添付ファイルを追加するWebフォームを作成しようとしています。チュートリアルや他のフォーラムから、これを 2 段階のプロセスで行う必要があることがわかりました (futon のように)。ドキュメントをアップロードできますが、添付ファイルをアップロードできないようです。私はいくつかの方法を試しましたが、現在私は次のようなことをしています:
html ファイル:
<!DOCTYPE HTML>
<html>
<head>
<title>Document submission</title>
<style type="TEXT/CSS" media="all">
</style>
</head>
<body>
<table>
<form id="form" name="form" action="">
<tr>
<td>Field</td>
<td><input type="text" required="required" name="field">
<span id="required">*</span></td>
</tr><tr>
</tr><tr>
<td></td><td><button type="button" id="submit">Select Attachment</button><td>
</tr>
</form>
</table>
</body>
<script src="/_utils/script/json2.js"></script>
<script src="/_utils/script/jquery.js"></script>
<script src="/_utils/script/jquery.couch.js"></script>
<script src="/_utils/script/jquery.form.js"></script>
<script src="/_utils/script/jquery.dialog.js"></script>
<script type="text/javascript" src="basic.js"></script>
</html>
次に、basic.js というファイルに次の内容を含めます。
function create_document(){
var db_name = 'uploader';
var db = $.couch.db(db_name);
var data={}
data['fname']=document.form.field.value;
db.saveDoc(data, {
success: function (data) {
add_attachment(db,data);
},
error: function () {
alert("Cannot save the thread.");
}
});
}
function add_attachment(db,data){
var docID = data.id;
var dbName = db.name;
var form = $("#upload-form");
$.showDialog("dialogue.html", {
load: function(elem) {
$("input[name='_rev']", elem).val(data._rev);
},
submit: function(data, callback) {
if (!data._attachments || data._attachments.length == 0) {
callback({_attachments: "Please select a file to upload."});
return;
}
var form = $("#upload-form");
form.find("#progress").css("visibility", "visible");
form.ajaxSubmit({
url: db.uri + $.couch.encodeDocId(docID),
success: function(resp) {
form.find("#progress").css("visibility", "hidden");
location.href = "?" + encodeURIComponent(dbName) +
"/" + $.couch.encodeDocId(docID);
}
});
}
});
}
$(document).ready(function() {
$("button#submit").click(function(event) {
create_document();
});
});
この JavaScript は、ほとんど futon.browse.js の uploadAttachment セグメントから取られたものです。dialog.html ファイルも、couchdb の www/dialog/_upload_attachment.html をそのままコピーしたものです。次に、すべてのファイル (メインの html、basic.js、および dialog.html) が CouchDB 設計ドキュメント (アップローダーと呼ばれるデータベース内) にアップロードされます。
ドキュメントは正常に作成されますが、何をしても添付ファイルが保存されません。私が試したさまざまな方法では、マルチパート フォームに関するエラーが発生するか、この場合は認識可能なエラーがまったく発生しません。
私が間違っていることを誰かが知っていますか?