2013-03-06 53 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, 
     });