2015-02-09 36 views
4

我有一個文件上傳的形式,使用Dropzone.js上傳文件到我的服務器。用戶一次最多可以上傳5個文件,但我有一個獨特的條件:如果服務器端出現任何單個文件錯誤(超過最大尺寸,錯誤的MIME類型,錯誤的文件類型等) ,我不需要將任何文件添加到我的數據庫中。這不是問題。如何允許在使用Dropzone.js失敗後重新提交文件上傳?

我遇到的問題是客戶端處理它。爲什麼當我從服務器收到響應時,我不能再通過單擊「提交」(其元素綁定到事件處理程序,如下所示)再次上傳文件?

 Dropzone.options.uploadedFilesDropzone = { 
       autoProcessQueue: false, 
       maxFilesize: 1024, //MB 
       addRemoveLinks: true, 
       uploadMultiple: true, 
       parallelUploads: 5, 
       maxFiles: 5, 
       init: function() { 

       var uploadedFilesDropzone = this; 

       $('#submit').on('click', function() { 
        uploadedFilesDropzone.processQueue(); 

        uploadedFilesDropzone.on("successmultiple", function(files, response) { 
         // Handle the responseText here. For example, add the text to the preview element: 
         console.log(files); 
         console.log(response.errors[0]); 
         $.each(files, function(index, file) { 
          // no errors 
          if (response.errors[index].length == 0) { 

          } else { 
           file.previewElement.classList.add('dz-error'); 
          } 
         }) 
        }); 
       }); 
       } 
     } 
+0

點擊提交失敗的方式是什麼?什麼都沒有發生?你有錯誤嗎?如果沒有錯誤,你可以上傳更多嗎? – Basic 2015-02-09 08:23:51

+0

此保管箱問題可能會有所幫助, https://github.com/enyo/dropzone/issues/717 – 2015-08-11 05:40:15

回答

8

調用processQueue()後,將從Dropzone隊列中刪除文件。您不能再通過點擊提交來上傳文件,因爲隊列中沒有文件。

您需要在接收到響應後將每個文件重新添加到隊列中。

如果文件服務器端出現錯誤,最好將響應的狀態碼設置爲200以外的值,以便可以覆蓋Dropzone錯誤偵聽器。

this.on("error", function(file, errorMessage) { 
     $.each(dropZone.files, function(i, file) { 
      file.status = Dropzone.QUEUED 
     }); 

     $.each(message, function(i, item) { 
      $("#dropzoneErrors .errors ul").append("<li>" + message[i] + "</li>") 
     }); 
    });