Kann PLUpload in Kombination mit CouchDB verwendet werden?

  • Ich suche nach einer Möglichkeit, Bilder in meine CouchDB hochzuladen und vor dem Hochladen die Größe zu ändern, solange sie noch beim Client sind. PLUpload bietet eine Möglichkeit dazu, aber ich frage mich, ob es möglich ist, es zusammen mit CouchDB zu verwenden.

    27 August 2011
    Towa
2 answers
  • Nach langem Ausprobieren und Lesen gelang es mir schließlich, ein Bild mit PLUpload in CouchDB hochzuladen. Das Hauptproblem bestand darin, dass es eine undokumentierte Eigenschaft "file_data_name" gibt, die manuell eingestellt werden muss die Bedürfnisse von CouchDB. Der Standardwert ist "Name", aber CouchDB erwartet "_attachments". Ich habe diese Eigenschaft nur durch Untersuchen des Quellcodes für die Flash-Laufzeit gefunden.

    Nachfolgend finden Sie das Javascript, das ich zum Initialisieren der PLUpload verwendet habe:

     $("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]",
      }
    });
     

    Bei diesem Ansatz ist es jedoch nur möglich, ein Bild zu einem einzelnen Dokument zu machen. Das Hochladen in mehrere Dokumente funktioniert nicht, aber ich habe es (noch) nicht wirklich versucht.

    26 August 2011
    Towa
  • Sie möchten das BeforeUpload-Ereignis von PLUploader überschreiben, um mit Ihrer Couch-Instanz zu arbeiten, bevor Sie die Datei hochladen. In der folgenden Methode erstelle ich ein neues Dokument (mit jquery.couch.js), erhalte die Antwort und verwende die neue _id und _rev des neuen Dokuments, um die PLUploader-Instanzoptionen festzulegen.

     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;
    });
     
    18 October 2011
    Chapterhouse