2013-03-06 52 views
0

我爲blueimp/jQuery文件上傳控件定製了一個文件上傳實現。除非我選擇多個文件並且其中一個文件超過最大長度,它仍然會嘗試上傳超出界限的文件(儘管我沒有爲該特定文件調用data.submit())。jQuery文件上傳控件錯誤地提交大文件

我已驗證progress事件不會針對大型(和未提交)文件觸發,但服務器最終會報告404.13(請求篩選模塊配置爲拒絕超出請求內容長度的請求),並且沒有其他實際提交的文件上傳。

如何更改我使用jQuery文件上傳控件上傳有效文件的方式,但忽略大文件?

這裏是我的代碼...它操縱了一個模型,它被挖空顯示UI元素,所以你不會在下面的代碼中看到任何UI操作。

 $('#fileupload').fileupload({ 
      dataType: 'json', 
      url: '/Handlers/UploadHandler.ashx', 
      progress: function (e, data) { 
       console.log(data.context); 
       var progress = parseInt(data.loaded/data.total * 100, 10); 
       var file = fileUploadDataModel.files()[data.context]; 
       file.percentComplete(progress); 
      }, 
      add: function (e, data) { 
       $.each(data.files, function (index, file) { 
        var fileModel = new FileModel(file.name, file.size); 
        fileUploadDataModel.files.push(fileModel); 
        data.context = fileUploadDataModel.files().length - 1; 

        if (file.size > opts.maxFileSize) { 
         fileModel.errorMessage('{0} ({1}) exceeds maximum size -- rejected'.format(file.name, friendlyBytes(file.size))); 
         fileModel.percentComplete(0); 
        } 
        else data.submit(); 
       }); 
      }, 
      done: function (e, data) { 
       var file = fileUploadDataModel.files()[data.context]; 
       file.percentComplete(100); 
      }, 
      singleFileUploads: false, 
     }); 

回答

0

我能得到這個通過標誌着無效的文件,從data.files陣列刪除它們,然後提交剩下的工作。這裏是固定代碼...

 $('#fileupload').fileupload({ 
      dataType: 'json', 
      url: '/Handlers/UploadHandler.ashx', 
      progress: function (e, data) { 
       console.log(data.context); 
       var progress = parseInt(data.loaded/data.total * 100, 10); 
       var file = fileUploadDataModel.files()[data.context]; 
       file.percentComplete(progress); 
      }, 
      add: function (e, data) { 
       var itemsToRemove = []; 
       $.each(data.files, function (index, file) { 
        var fileModel = new FileModel(file.name, file.size); 
        fileUploadDataModel.files.push(fileModel); 
        fileModel.sourceIndex = fileUploadDataModel.files().length - 1; 
        file.fileModel = fileModel; 

        if (file.size > opts.maxFileSize) { 
         fileModel.errorMessage('{0} ({1}) exceeds maximum size -- rejected'.format(file.name, friendlyBytes(file.size))); 
         fileModel.percentComplete(0); 
         itemsToRemove.push(index); 
        } 
       }); 

       itemsToRemove = itemsToRemove.reverse(); 
       for (index in itemsToRemove) 
        data.files.splice(itemsToRemove[index], 1); 

       $.each(data.files, function (index, file) { 
        data.context = file.fileModel.sourceIndex; 
        data.submit(); 
       }); 
      }, 
      done: function (e, data) { 
       var file = fileUploadDataModel.files()[data.context]; 
       file.percentComplete(100); 
      }, 
      singleFileUploads: false, 
     });