2014-05-21 144 views
0

我正在使用jquery文件上傳擴展(https://github.com/blueimp/jQuery-File-Upload/)使我的網站上傳系統。jquery文件上傳:單個文件上傳用於拖放

問題是,我不希望允許用戶通過拖放區域上傳多個文件,有沒有什麼辦法限制它,並且只允許單個文件上傳?我發現只有這樣的按鈕限制,並且wiki中沒有關於單個拖放上傳的信息。

+1

只是檢查被丟棄的文件的數量,並給予警告說,只允許單個文件。因爲我們無法阻止用戶拖動多個文件,所以他應該通知 –

+0

謝謝,這會有所幫助。 – Dazvolt

+0

不客氣... –

回答

0

看着他們的文檔,答案是有:

注意,用戶仍可以拖動&中的多個文件。要強制執行一個 文件上傳限制,可以使用maxNumberOfFiles選項 (請參閱 Options)。

+0

我已經試過了。它對整體文件上傳計數有限制,並且不會影響拖放區域。 – Dazvolt

0

您需要將jquery.fileupload.validate.js添加到您的網站。然後將考慮maxNumberOfFiles屬性。

您可以設置爲1

$('.something').fileupload({ 
    dropZone   : $('.your-dropzone'), 
    url    : 'http://...', 
    dataType   : 'json', 
    maxNumberOfFiles : 1 
}); 
+0

如果他拖動多個文件並將其刪除,那麼會怎麼考慮呢? –

+0

maxNumberOfFiles將影響整個文件上傳計數,而不僅僅是拖放操作。 – Dazvolt

+0

@susheel:在這種情況下,驗證會拋出一個您可以處理的錯誤。 –

0

復活這個問答,因爲我發現解決類似的問題,我已經需要做我自己......

的maxNumberOfFiles價值,DazVolt指出,適用於在會話中上傳的所有文件,而不僅僅是特定的上傳文件,因爲jquery.fileupload-ui.js中的這個函數基本上統計了UI中已處理(即已上傳的)表格行的數量,然後再與maxNumberOfFiles進行比較:

getNumberOfFiles: function() { 
       return this.filesContainer.children() 
        .not('.processing').length; 
      }, 

令人高興的是,雖然,getNumberOfFiles的這個定義是可以改變的......

爲了使每次上傳的工作,即它限制在每次上傳一個文件,但有多達上傳你喜歡我這樣做:

  1. 在我添加了一個類的previouslyUploaded'到模板表格行下載模板:

    {% for (var i=0, file; file=o.files[i]; i++) { %} <tr class="template-download fade previouslyUploaded">

  2. 之前我定義FileUpload對象,我提出一個新的功能,通過該計數表中的行,但忽略那些已經上傳,即通過在下載模板條目所代表的那些getNumberOfFiles被稱爲:然後

    var perUploadRestriction = function() { 
        // previouslyUploaded is a class added in template-download 
        // with this query here it means previously uploaded files don't count towards the max_file_upload limit 
        // only the files in the current upload in preparation 
        return this.filesContainer.children().not('.processing').not('.previouslyUploaded').length; 
    }; 
    
  3. 我在FileUpload對象定義使用此功能,像這樣:現在

    $(this).fileupload({ 
         dropZone: $(this), 
         processQueue: [{ 
          action: 'validate', 
          //acceptFileTypes: *a regex object for your file types*, 
          maxFileSize: 5000000, 
          maxNumberOfFiles: 1, 
         }], 
         getNumberOfFiles: perUploadRestriction, 
        }); 
    

而且,如果我拖放多個文件到懸浮窗,我得到一個錯誤消息,但之後成功上載我仍然可以使莫重新上傳時有相同的限制。

這是一個黑客攻擊的一位,但適合我的目的