当扩展名与正则表达式模式匹配时过滤文件

时间:2016-05-25 09:20:06

标签: filter mime-types plupload file-browser

在Plupload中,我们可以通过设置filters来限制文件类型(例如,存档文件),如下所示

// Specify what files to browse for
filters : [
       {title : "Zip files", extensions : "zip,avi"}
    ],

我有文件列表(例如 X.A1,Y.A2,Z.A3,... ),其中扩展名的范围可以从 A1 AN (其中 N 是一个整数)。

我想要的是过滤所有扩展名为 A 且后跟整数的文件。像

这样的东西
filters : [
           {title : "Start With A", extensions : "A\\d+"}
        ],

我尝试使用过滤器

filters : [
           {title : "Start With A", extensions : "A1,A2,A3,A4"}
        ],

但我不知道我们可能有多少扩展。

有没有办法使用正则表达式来过滤所选文件?

1 个答案:

答案 0 :(得分:1)

您有两种选择:

  1. 您只需要创建一个您想要允许的扩展字符串。一个简单的for循环足以创建这样的字符串。

    使用此解决方案,您可以设置正确的允许扩展名。

  2. 您允许用户选择任何文件扩展名,但在选择文件后,您可以验证扩展名是否符合您的要求。如果是,则将文件添加到上载队列。如果不这样做,则向用户抛出错误。

  3. 选项1:

    var extensions = '', i;
    
    for (i = 1; i < 30; i++) {
        extensions += 'A' + i + ',';
    }
    extensions = extensions.slice(0, -1);
    
    var uploader = new plupload.Uploader({
        // (....)
    
        filters : {
            max_file_size : '10mb',
            mime_types: [
                {title : "Custom files", extensions: extensions}
            ]
        },
    
        // (....)
    

    选项2:

    var uploader = new plupload.Uploader({
        // (....)
    
        init: {
            FilesAdded: function(up, files) {
                // Foreach file
                plupload.each(files, function(file) {
                    // Get the file extension
                    var fileExtension = file.name.split('.').pop();
                    // Create the pattern
                    var pattern = new RegExp("^A\d$");
    
                    // If the pattern doesn't match, don't allow the file.
                    if (!pattern.test(fileExtension)) {
                        console.log('not added');
                        return false;
                    }
    
                    console.log('added');
                    document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
                });
            },
    
        // (....)