我有代码使用 jquery.form.js 对沙发文档进行 POST 附件。这一切都很好,但我真的需要允许用户在表单中输入多个文件,假设现在有 5 个文件,然后在代码中迭代表单中的五个文件,为每个文件创建一个新的 Couch 文档和附件。如果不是不可能,仅使用jQuery,这是非常困难的。可以使用Couch"内联附件"来完成,但是您需要一个服务器端(可能是PHP)脚本来对二进制图像数据进行Base64编码。这对我来说真的不是一个选择,因为这是一个沙发。
所以下面的代码不起作用,它会在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 和文件,它们都有正确的数据,所以它们不是问题。
有人认为上述应该有效吗?如果是这样,我做错了什么?
非常感谢您的建议:-)
您有两个选择:
-
使用内联附件。您不必使用 PHP 来解码 base64 数据:只需将 CouchApp
/_utils/script/base64.js
文件(是的,它随 CouchDB Futon 一起提供)作为 CommonJS 模块添加到您的 CouchApp 中,您就会没事的。 -
使用多部分 API(向下滚动一点以获取示例)。我没有太多使用jQuery快速制作工作原型的经验,但这个问题可能会对您有所帮助。
更新:找到了如何使用多部分API将多个二进制附件上传到CouchDB的良好工作示例。