2013-10-26 72 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