Можно ли использовать PLUpload в сочетании с CouchDB? - PullRequest
2 голосов
/ 25 августа 2011

Я ищу некоторую возможность загрузки изображений на мою CouchDB и изменения их размера перед загрузкой, пока они все еще находятся у клиента. PLUpload предлагает такую ​​возможность, но мне интересно, можно ли использовать его вместе с CouchDB.

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

После долгих попыток и чтения мне наконец-то удалось загрузить изображение в CouchDB с помощью PLUpload. Основная проблема заключалась в том, что существует недокументированное свойство «file_data_name», которое необходимо установить вручную, чтобы соответствовать потребностям из CouchDB. Значением по умолчанию является «имя», но CouchDB ожидает «_attachments». Я нашел это свойство только путем проверки исходного кода на время выполнения флэш-памяти.

Ниже приведен javascript, который я использовал для инициализации загрузки PLU:

$("form#pluploadForm #uploader").plupload({
  // General settings
  runtimes : 'flash,silverlight,html5',
  url : 'http://your.path.to.couchdb.com/database/[documentid]',
  max_file_size : '10mb',
  unique_names : true,
  file_data_name : "_attachments",

  // Resize images on clientside if we can
  resize : {width : 320, height : 240, quality : 90},

  // Specify what files to browse for
  filters : [
    {title : "Image files", extensions : "jpg,gif,png"},
    {title : "Zip files", extensions : "zip"}
  ],

  // Flash settings
  flash_swf_url : 'js/plupload.flash.swf',

  // Silverlight settings
  silverlight_xap_url : 'js/plupload.silverlight.xap',

  multipart : true,
  multipart_params : {
    description: "uploadedViaPlupload",
   _rev: "[the current revision of your document]",
  }
});

Но при таком подходе возможно только одно изображение в одном документе. Загрузка нескольких документов не работает, но я на самом деле не пробовал (пока).

1 голос
/ 18 октября 2011

То, что вы хотите сделать, это переопределить событие BeforeUpload PLUploader для работы с вашим экземпляром кушетки перед загрузкой файла.В следующем методе я создаю новый документ (используя jquery.couch.js), получаю ответ и использую новые _id и _rev нового документа для установки параметров экземпляра PLUploader.

uploader.bind('BeforeUpload', function(up, file) {
  $db.saveDoc({
    users : ['all']
  }, {
    success : function(response) {
      if(response.ok) {
        up.settings.url = 'http://127.0.0.1:5984/filesystem/' + response.id;
        up.settings.multipart_params._rev = response.rev;
        up.trigger("UploadFile", file);
      }
    }
  });
  return false;
});
...