web-dev-qa-db-fra.com

extension de fichier de recherche jQuery (de chaîne)

Je me demandais s'il était possible pour jQuery de trouver une extension de fichier basée sur une chaîne retournée?

Un nom de fichier (chaîne) sera passé à une fonction (openFile) et je voulais que cette fonction fasse différentes choses en fonction du fichier passé, qu'il s'agisse de fichiers image ou de fichiers pdf.

function openFile(file) { 

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

  //if .Zip/.rar do something else

  //if .pdf do something else

};

Je cherchais quelque chose qui puisse trouver l'extension du fichier, mais je n'arrive pas à trouver quoi que ce soit.

28
SoulieBaby

Que diriez-vous quelque chose comme ça.

Testez l'exemple en direct:http://jsfiddle.net/6hBZU/1/

Il suppose que la chaîne se terminera toujours par l'extension:

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");

EDIT: j'ai supprimé par erreur une partie de la chaîne dans openFile("somestring.png");. Corrigée. Avait-il dans l'exemple en direct, cependant.

75
user113716

Pour obtenir l'extension du fichier, je voudrais faire ceci:

var ext = file.split('.').pop();
69
Doug Neiner

Encore une autre façon de l'écrire:

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;
    }
}
12
artlung

Vous pouvez utiliser une combinaison de substring et lastIndexOf

Échantillon

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

Etant donné que l'extension sera toujours la chaîne après un point dans un nom de fichier complet/partiel, utilisez simplement la fonction split intégrée dans js et testez l'extension résultante pour ce que vous voulez qu'elle fasse. Si split ne retourne qu'une pièce/aucune pièce, elle ne contient pas d'extension.

1
futureelite7

Essaye ça:

var extension = fileString.substring(fileString.lastIndexOf('.') + 1);
1
Jacob Relkin
var fileName = 'file.txt';

// Getting Extension

var ext = fileName.split('.')[1];

// OR

var ext = fileName.split('.').pop();
1
Amr SubZero

Une autre façon (qui évite les instructions de casse étendues) consiste à définir des tableaux d'extensions de fichiers pour un traitement similaire et à utiliser une fonction pour vérifier le résultat de l'extension par rapport à un tableau (avec commentaires):

// 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 }
0
RickL