【问题标题】:jQuery Ajax PUT an attachment to CouchDB docjQuery Ajax 将附件放入 CouchDB 文档
【发布时间】:2013-11-05 18:26:09
【问题描述】:

我有使用 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 和文件,它们都有正确的数据,所以它们不是问题。

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

非常感谢您的建议 :-)

【问题讨论】:

    标签: ajax jquery couchdb couchapp


    【解决方案1】:

    你有两个选择:

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

    2. 使用Multipart API(例如向下滚动一点)。我没有太多使用 jQuery 快速制作工作原型的经验,但 this question 你可能会觉得很有帮助。

    更新:发现 good working example 如何使用 multipart API 将多个二进制附件上传到 CouchDB。

    【讨论】:

    • 感谢您的回复。我查看了 Couch 中的 base64.js ,但这并不符合您的想法。它在 base64 中编码/解码 strings 而不是二进制图像数据。您的 (2) 示例还依赖于编码为 base64 的二进制图像 blob。
    • @Locohost 啊哈,感谢您的注释。我想知道 PouchDB 如何解决这样的问题,因为它应该很常见。
    • 如果我将应用程序从 Couch (Couchapp) 中移出并返回到普通的 Web 应用程序中,我可以使用一个非常简单的 PHP 脚本来对二进制图像数据进行 base64 处理。
    • @Locohost 我用我发现的新示例更新了帖子:使用 multipart api 将多个附件上传到 CouchDB 并且看起来不像 base64 的东西 - 所有图像都应该存储。
    • 我确实看到了那个多部分示例并通读了它。问题是使用 Curl 执行 PUT 可能会正常工作,因为 Curl 会在 PUT 之前对图像 blob 进行 Base64 处理。 jQuery ajax PUT 不这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2011-12-31
    • 2012-01-08
    • 1970-01-01
    相关资源
    最近更新 更多