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

Prevent folder upload in jQuery File Upload

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

我们有阻止文件夹的选项吗?或者我们可以选择在文件夹出现拖放区之前对其进行压缩吗?或者是否可以显示一条警告消息,表明用户必须将文件夹转换为 zip/rar 并拖动?

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

我尝试设置 minFileSize: 1maxNumberOfFiles: 1(以及设置 getNumberOfFiles!)、singleFileUploads: falselimitMultiFileUploads: 1 的选项。 .. 但其中 none 似乎工作得很好,文档有点模糊,代码有点复杂。

他们确实有一个验证选项 (https://github.com/blueimp/jQuery-File-Upload/wiki/Options#processqueue),但该示例使用 jQuery.

中已弃用的 $.Deferred 方法

所以,我最终做了这样的事情(我删除了我所有的自定义内容和额外内容以使其更 simple/to 重点):

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.[​​=22=]

我没有找到选项,但它更改了 jquery.fileupload.js

中的代码

 } else if (entry.isDirectory) {
       // directory drag prevent
       //dirReader = entry.createReader();
       //readEntries();
} else {