2013-10-26 101 views
1

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

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

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); 
     } 
    }); 

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

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

非常感谢你的建议:-)

回答

0

有两个选项有:

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

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

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

+0

感谢您的回复。我看了一眼Couch的base64.js,但那不符合你的想法。它使用base64而不是二进制图像数据对* strings *进行编码/解码。您的(2)示例还依赖于以base64编码的二进制图像blob。 – Locohost

+0

@Locohost aha,感谢您的注意。我想知道PouchDB如何解决这个问题,因为它应该是常见的。 – Kxepal

+0

如果我将应用程序从沙发(Couchapp)移出并重新转换为普通的Web应用程序,我可以使用一个非常简单的PHP脚本来基于二进制图像数据。 – Locohost