1

我有使用 jquery.form.js 将附件发布到 Couch 文档的代码。这一切都很好,但我真的需要允许用户在表单中输入多个文件,假设现在是 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);
        }
    });

代码是从一个更大的函数内部剪辑的。我已经记录了 url 和文件,它们都有正确的数据,所以它们不是问题。

有没有人认为上述应该工作?如果是这样,我做错了什么?

非常感谢您的建议:-)

4

1 回答 1

0

你有两个选择:

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

  2. 使用Multipart API(例如向下滚动一点)。我没有太多使用 jQuery 快速制作工作原型的经验,但这个问题可能对您有所帮助。

更新:找到了很好的工作示例,如何使用多部分 API 将多个二进制附件上传到 CouchDB。

于 2013-10-26T18:42:11.930 回答