2013-10-26 7 views
1

У меня есть код, который вставляет вложения POST в Douch Docs с помощью jquery.form.js. Это все хорошо, но мне действительно нужно разрешить пользователю вводить несколько файлов в форме, скажем, 5 файлов, а затем в коде итератировать пять файлов в форме, создав один новый Doc-файл и вложение для каждого файла. Это veeeery сложно, если не невозможно, используя только jQuery. Это можно сделать с помощью встроенных вложений Couch, но тогда вам понадобится сценарий на стороне сервера (возможно PHP), чтобы Base64 кодировал данные двоичного изображения. Это действительно не вариант для меня, потому что это Couchapp.jQuery Ajax PUT приложение к CouchDB doc

Так следующий код не работает, он генерирует ошибку «вызова» в 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); 
     } 
    }); 

Код вырезал из внутри большей функции. Я зарегистрировал URL-адрес и файл, они оба имеют правильные данные, поэтому они не являются проблемой.

Кто-нибудь думает, что выше должен работать? Если да, то что я делаю неправильно?

Большое спасибо за ваши советы :-)

ответ

0

У вас есть два варианта: там

  1. Используйте встроенные приложения. Вам не нужно использовать PHP для декодирования данных base64: просто добавьте в свой файл CouchApp /_utils/script/base64.js (да, он поставляется с CouchDB Futon) в качестве модуля CommonJS, и все будет в порядке.

  2. Используйте Multipart API (прокрутите немного вниз для примера). У меня мало опыта работы с jQuery, чтобы быстро создать рабочий прототип, но this question вы можете найти полезной.

Update: найдено good working example как загрузить несколько двоичных вложений в CouchDB, используя многослойную API.

+0

Спасибо за ответ. Я посмотрел на base64.js в Couch, но это не делает то, что вы думаете. Он кодирует/декодирует * строки * в base64, а не бинарные данные изображения. Ваш пример (2) также основан на двоичном изображении blob, закодированном как base64. – Locohost

+0

@ Locohost aha, спасибо за заметки. Интересно, как PouchDB решает такую ​​проблему, поскольку это должно быть общим для нее. – Kxepal

+0

Если бы я переместил приложение из Couchapp (Couchapp) и вернулся в обычное веб-приложение, я мог бы использовать очень простой PHP-скрипт для base64 данных двоичного изображения. – Locohost

Смежные вопросы