【问题标题】:Jquery file upload: single file upload for drag and dropjquery文件上传:单文件上传拖拽
【发布时间】:2017-08-05 08:04:41
【问题描述】:

我正在使用 Jquery 文件上传扩展 (https://github.com/blueimp/jQuery-File-Upload/) 在我的网站上制作上传系统。

问题是,我不想让用户通过拖放区上传多个文件,有没有办法限制它只允许上传单个文件?我发现只有这样的按钮限制,并且 wiki 中没有关于单次拖放上传的信息。

【问题讨论】:

  • 只需检查被删除的文件数量并发出警告,说只允许单个文件。因为我们不能阻止用户拖动他应该通知的多个文件

标签: jquery


【解决方案1】:

查看他们的文档,答案就在那里:

请注意,用户仍然可以拖放多个文件。强制执行一个 文件上传限制,您可以使用 maxNumberOfFiles 选项 (看 Options)。

【讨论】:

  • 我已经试过了。它是对整体文件上传数量的限制,不会影响拖放区域。
【解决方案2】:

您需要将 jquery.fileupload.validate.js 添加到您的站点。然后将考虑 maxNumberOfFiles 属性。

您可以将其设置为 1。

$('.something').fileupload({
    dropZone          : $('.your-dropzone'),
    url               : 'http://...',
    dataType          : 'json',
    maxNumberOfFiles  : 1
});

【讨论】:

  • 如果他拖拽多个文件并放下它..会考虑哪一个?
  • maxNumberOfFiles 将影响整体文件上传计数,而不仅仅是拖放。
  • @susheel:在这种情况下,验证会抛出一个您可以处理的错误。
【解决方案3】:

复活这个 q 因为我找到了一个解决方法,我需要自己做......

正如 DazVolt 指出的那样,maxNumberOfFiles 值适用于会话中上传的所有文件,而不仅仅是特定的上传,因为 jquery.fileupload-ui.js 中有这个函数,它基本上计算处理的数量(即已上传)UI 中的表行,然后与 maxNumberOfFiles 进行比较:

getNumberOfFiles: function () {
                return this.filesContainer.children()
                    .not('.processing').length;
            },

不过,令人高兴的是,这个 getNumberOfFiles 的定义可以更改...

为了使其每次上传都能正常工作,即每次上传限制为一个文件,但上传数量与您一样多,我这样做了:

  1. 在下载模板中,我在表格行的模板中添加了一个“previouslyUploaded”类:

    {% for (var i=0, file; file=o.files[i]; i++) { %} <tr class="template-download fade previouslyUploaded">

  2. 在定义 fileupload 对象之前,我创建了一个由 getNumberOfFiles 调用的新函数,该函数计算表格行数,但忽略已上传的行数,即下载模板中的条目表示的行数:

    var perUploadRestriction = function () {
        // previouslyUploaded is a class added in template-download
        // with this query here it means previously uploaded files don't count towards the max_file_upload limit
        // only the files in the current upload in preparation
        return this.filesContainer.children().not('.processing').not('.previouslyUploaded').length;
    };
    
  3. 然后我在文件上传对象定义中使用这个函数:

        $(this).fileupload({
            dropZone: $(this),
            processQueue: [{
                action: 'validate', 
                //acceptFileTypes: *a regex object for your file types*, 
                maxFileSize: 5000000, 
                maxNumberOfFiles: 1,
            }],
            getNumberOfFiles: perUploadRestriction,
        });
    

现在,如果我将多个文件拖放到 dropzone 中,我会收到一条错误消息,但在成功上传后,我仍然可以使用相同的限制进行更多上传。

这有点小技巧,但适合我的目的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2011-12-23
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多