【问题标题】:jQuery find file extension (from string)jQuery 查找文件扩展名(从字符串)
【发布时间】:2010-06-15 03:17:48
【问题描述】:

我想知道 jQuery 是否可以根据返回的字符串找到文件扩展名?

文件名(字符串)将被传递给函数(openFile),我希望该函数根据传递的文件执行不同的操作,可以是图像文件或 pdf 文件。

function openFile(file) { 

  //if .jpg/.gif/.png do something

  //if .zip/.rar do something else

  //if .pdf do something else

};

我一直在寻找可以找到文件扩展名的东西,但我似乎找不到任何东西。

【问题讨论】:

  • 感谢大家的帮助! :)

标签: jquery file


【解决方案1】:

这样的事情怎么样。

测试现场示例: http://jsfiddle.net/6hBZU/1/

假设字符串总是以扩展名结尾:

function openFile(file) {
    var extension = file.substr( (file.lastIndexOf('.') +1) );
    switch(extension) {
        case 'jpg':
        case 'png':
        case 'gif':
            alert('was jpg png gif');  // There's was a typo in the example where
        break;                         // the alert ended with pdf instead of gif.
        case 'zip':
        case 'rar':
            alert('was zip rar');
        break;
        case 'pdf':
            alert('was pdf');
        break;
        default:
            alert('who knows');
    }
};

openFile("somestring.png");

编辑:我错误地删除了openFile("somestring.png"); 中的部分字符串。已更正。不过,在 Live Example 中有它。

【讨论】:

  • 哈哈,差点给我留言,然后我就想嗯……可能是我没看懂。 +1 好答案
  • 当文件没有扩展名时,这种方式不起作用。像文件夹/文件没有扩展名
  • 所以这比下面发布的.split('.').pop(); 快​​吗?
【解决方案2】:

要获得文件扩展名,我会这样做:

var ext = file.split('.').pop();

【讨论】:

  • +1 - 获得扩展的更好方法。希望我能想到它!
  • 是的..整洁。尽管我将其更改为 file.name.split('.').pop() 因为我的 var file 是一个对象。谢谢!
  • 当有查询字符串参数时,脚本将无法正常工作,例如/example/image.jpg?a=b&b=2,为了处理它,我又添加了一个拆分 file.split("?")[0].split('.').pop()(注意:很多时候系统在需要时使用查询字符串来防止缓存)
【解决方案3】:

另一种写法:

function getExtension(filename) {
    return filename.split('.').pop().toLowerCase();
}

function openFile(file) { 
    switch(getExtension(file)) {
        //if .jpg/.gif/.png do something
        case 'jpg': case 'gif': case 'png':
            /* handle */
            break;
        //if .zip/.rar do something else
        case 'zip': case 'rar':
            /* handle */
            break;

        //if .pdf do something else
        case 'pdf':
            /* handle */
            break;
    }
}

【讨论】:

    【解决方案4】:

    您可以使用substringlastIndexOf 的组合

    示例

    var fileName = "test.jpg";
    var fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1); 
    

    【讨论】:

      【解决方案5】:
      var fileName = 'file.txt';
      
      // Getting Extension
      
      var ext = fileName.split('.')[1];
      
      // OR
      
      var ext = fileName.split('.').pop();
      

      【讨论】:

        【解决方案6】:

        由于扩展名始终是完整/部分文件名中的句点后的字符串,因此只需使用 js 中内置的拆分功能,并测试生成的扩展名是否符合您的要求。如果 split 只返回一个片段/没有片段,则它不包含扩展。

        【讨论】:

          【解决方案7】:

          试试这个:

          var extension = fileString.substring(fileString.lastIndexOf('.') + 1);
          

          【讨论】:

            【解决方案8】:

            另一种方法(避免扩展 switch-case 语句)是定义文件扩展名数组以进行类似处理,并使用函数检查扩展名结果与数组(使用 cmets):

            // Define valid file extension arrays (according to your needs)
            var _docExts = ["pdf", "doc", "docx", "odt"];
            var _imgExts = ["jpg", "jpeg", "png", "gif", "ico"];
            // Checks whether an extension is included in the array
            function isExtension(ext, extnArray) {
                var result = false;
                var i;
                if (ext) {
                    ext = ext.toLowerCase();
                    for (i = 0; i < extnArray.length; i++) {
                        if (extnArray[i].toLowerCase() === ext) {
                            result = true;
                            break;
                        }
                    }
                }
                return result;
            }
            // Test file name and extension
            var testFileName = "example-filename.jpeg";
            // Get the extension from the filename
            var extn = testFileName.split('.').pop();
            // boolean check if extensions are in parameter array
            var isDoc = isExtension(extn, _docExts);
            var isImg = isExtension(extn, _imgExts);
            console.log("==> isDoc: " + isDoc + " => isImg: " + isImg);
            // Process according to result: if(isDoc) { // .. etc }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-04-30
              • 1970-01-01
              • 1970-01-01
              • 2013-06-02
              • 1970-01-01
              • 1970-01-01
              • 2010-09-13
              • 2017-08-22
              相关资源
              最近更新 更多