jQuery Ajax PUT是CouchDB doc的附件

时间:2013-10-26 18:07:42

标签: ajax jquery couchdb couchapp

我有使用jquery.form.js对Couch文档进行POST附件的代码。这一切都很好,但我真的需要允许用户在表单中输入多个文件,现在说5个文件,然后在代码中迭代表单中的5个文件,为每个文件创建一个新的Couch文档和附件。 如果不是仅仅使用jQuery ,这是很难的。它可以使用Couch“内联附件”完成,但是你需要一个服务器端(可能是PHP)脚本来对Base64编码二进制图像数据。这对我来说真的不是一个选择,因为这是一个Couchapp。

所以以下代码不起作用,它在jQuery中生成“调用”错误。我的假设是你不能简单地在数据属性中添加二进制文件的引用...

    var url= _.couchUrl() + me.photoArgs.db +"/" + 
             couchDoc._id + "/attachment?rev=" + couchDoc._rev;
    $.ajax({
        type: "PUT",
        url: url,
        headers: { 
            "Content-Length": file.size,
            "Content-Type": file.type 
        },
        data: file,
        success: function (response) {
            console.log("Attachment was uploaded");
            me.fileCnt--;
            if (me.fileCnt == 0) console.log("Attachment(s) uploaded");
        },
        error: function (response) {
            _.flashError('Attachment ajaxSubmit failed',me,response);
        }
    });

代码从较大的函数内部剪裁。我已经记录了网址和文件,它们都有正确的数据,所以它们不是问题。

有人认为上面的应该有效吗?如果是这样,我做错了什么?

非常感谢您的建议: - )

1 个答案:

答案 0 :(得分:0)

您有两种选择:

  1. 使用内联附件。您不必使用PHP来解码base64数据:只需添加到您的CouchApp /_utils/script/base64.js文件(是的,它与CouchDB Futon一起提供)作为CommonJS模块,您就可以了。

  2. 使用Multipart API(向下滚动一下以获取示例)。我没有太多使用jQuery来快速制作原型的经验,但this question你可能会觉得有用。

  3. 更新:找到good working example如何使用多部分API将多个二进制附件上传到CouchDB。