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.
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.
Pour obtenir l'extension du fichier, je voudrais faire ceci:
var ext = file.split('.').pop();
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;
}
}
Vous pouvez utiliser une combinaison de substring et lastIndexOf
Échantillon
var fileName = "test.jpg";
var fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1);
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.
Essaye ça:
var extension = fileString.substring(fileString.lastIndexOf('.') + 1);
var fileName = 'file.txt';
// Getting Extension
var ext = fileName.split('.')[1];
// OR
var ext = fileName.split('.').pop();
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 }