2011-08-24 70 views
2

我正在尋找將圖片上傳到我的CouchDB並在上傳之前調整它們的大小,只要它們仍在客戶端。 PLUpload提供了這樣做的可能性,但我想知道是否可以將它與CouchDB一起使用。是否可以將PLUpload與CouchDB結合使用?

回答

2

經過大量的嘗試和閱讀,我最終設法使用PLUpload將圖片上傳到CouchDB。 主要問題是有一個未記錄的屬性「file_data_name」,必須手動設置以符合CouchDB的需求。默認值是「name」,但CouchDB期待「_attachments」。我只通過檢查Flash運行時的源代碼來找到該屬性。

下面有我用於初始化PLUpload的JavaScript:

$("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

你想要做的是覆蓋PLUploader的BeforeUpload事件,以便在上傳文件之前使用沙發實例。在下面的方法中,我創建了一個新文檔(使用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; 
}); 
相關問題