Ich bin auf der Suche nach einer Möglichkeit, Bilder in meine CouchDB hochzuladen und sie vor dem Upload zu verkleinern, solange sie noch beim Client sind. PLUpload bietet eine Möglichkeit dafür, aber ich frage mich, ob es möglich ist, es zusammen mit CouchDB zu verwenden.
Antworten
Zu viele Anzeigen?Nach viel Versuch und Lesen ist es mir endlich gelungen, ein Bild mit PLUpload in CouchDB hochzuladen. Das Hauptproblem war, dass es eine undokumentierte Eigenschaft "file_data_name" gibt, die manuell auf die Anforderungen von CouchDB eingestellt werden muss. Der Standardwert ist "name", aber CouchDB erwartet "_attachments". Ich habe diese Eigenschaft nur gefunden, indem ich den Quellcode für die Flash-Laufzeit inspiziert habe.
Unten ist der JavaScript-Code aufgeführt, den ich für die Initialisierung des PLUpload verwendet habe:
$("form#pluploadForm #uploader").plupload({
// Allgemeine Einstellungen
runtimes : 'flash,silverlight,html5',
url : 'http://dein.pfad.zu.couchdb.com/datenbank/[dokumentid]',
max_file_size : '10mb',
unique_names : true,
file_data_name : "_attachments",
// Bilder auf der Clientseite verkleinern, wenn möglich
resize : {width : 320, height : 240, quality : 90},
// Angeben, welche Dateien durchsucht werden sollen
filters : [
{title : "Bilddateien", extensions : "jpg,gif,png"},
{title : "Zip-Dateien", extensions : "zip"}
],
// Einstellungen für Flash
flash_swf_url : 'js/plupload.flash.swf',
// Einstellungen für Silverlight
silverlight_xap_url : 'js/plupload.silverlight.xap',
multipart : true,
multipart_params : {
description: "über PLUpload hochgeladen",
_rev: "[die aktuelle Revision Ihres Dokuments]",
}
});
Aber mit diesem Ansatz ist es nur möglich, ein Bild zu einem einzelnen Dokument hochzuladen. Das Hochladen in mehrere Dokumente funktioniert nicht, aber ich habe es noch nicht wirklich ausprobiert.
Was du tun möchtest, ist das BeforeUpload-Ereignis von PLUploader überschreiben, um mit deiner Couch-Instanz zu arbeiten, bevor die Datei hochgeladen wird. In der folgenden Methode erstelle ich ein neues Dokument (unter Verwendung von jquery.couch.js), hole die Antwort und verwende die neuen _id und _rev des neuen Dokuments, um die Optionen der PLUploader-Instanz 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;
});