在jQuery文件上载中阻止文件夹上载

时间:2015-02-03 06:37:21

标签: javascript jquery file-upload blueimp

我使用blueimp jQuery-File-Upload上传文件(https://github.com/blueimp/jQuery-File-Upload/)。我希望阻止用户将文件夹拖到Google Chrome(或任何其他brwosers)的放置区域。我已经尝试了多个和多个目录webkitdirectory mozdirectory选项。我不希望用户在任何浏览器中删除文件夹(包括chrome)。

我们可以选择阻止文件夹吗?或者我们可以选择在文件夹出现丢弃区域之前将其压缩吗?或者是否可以显示警告消息,指示用户必须将文件夹转换为zip / rar并拖动?

2 个答案:

答案 0 :(得分:2)

所以,我有同样的问题。在Chrome上检测它的方法是查找data.originalFiles.length > 1,在Firefox上要查找data.files[0].size === 0

我尝试设置minFileSize: 1maxNumberOfFiles: 1的选项(并设置getNumberOfFiles!),singleFileUploads: falselimitMultiFileUploads: 1 ...但是它们似乎都不能很好地工作,文档有点模糊,代码有点复杂。

他们有一个验证选项(https://github.com/blueimp/jQuery-File-Upload/wiki/Options#processqueue),但该示例在jQuery中使用了已弃用的$.Deferred方法。

所以,我最终做了这样的事情(我删除了所有自定义内容和附加内容,使其更简单/更直接):

var jqXHR = null;

$('#fileupload').fileupload({
  multipart: false,
  add: function(e, data) {
    if (data.originalFiles.length > 1 || data.files[0].size === 0) {
      fileError(null, 'zip');
    } else {
      jqXHR = data.submit();
    }
  },
  error: function(jqXHR, textStatus) {
    self.fileError(jqXHR, textStatus);
  }
});

var fileError = function(jqXHR, textStatus) {
  var statusCode = jqXHR ? jqXHR.status : 0;
  // Figure out something nice to say, then close modal and clear out input box.
  var friendlyError = 'Your file failed to upload.';

  if (textStatus === 'abort') {
    friendlyError = 'Your file upload was aborted.';
  } else if (textStatus === 'error') {
    friendlyError = 'There was a server error that prevented your file from being uploaded.';
  } else if (textStatus === 'zip') {
    friendlyError = 'This file cannot be uploaded. Please zip the file and try again.';
  }

  // Your custom UI code here!
};

基本上,如果它有多个文件或文件大小为0,则触发错误代码而不是提交jqXHR数据。然后,覆盖fileupload中的错误处理,使用此错误处理程序,因为DRY。

答案 1 :(得分:0)

我找不到选项,但它更改了jquery.fileupload.js中的代码

yourTableView.keyboardDismissMode = .Interactive