Il est possible de ne vérifier que l'extension du fichier, mais l'utilisateur peut facilement renommer virus.exe en virus.jpg et "passer" la validation.
Pour ce que ça vaut, voici le code pour vérifier l'extension du fichier et abandonner s'il ne correspond pas à l'une des extensions valides : (choisissez le fichier invalide et essayez de soumettre pour voir l'alerte en action)
var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];
function Validate(oForm) {
var arrInputs = oForm.getElementsByTagName("input");
for (var i = 0; i < arrInputs.length; i++) {
var oInput = arrInputs[i];
if (oInput.type == "file") {
var sFileName = oInput.value;
if (sFileName.length > 0) {
var blnValid = false;
for (var j = 0; j < _validFileExtensions.length; j++) {
var sCurExtension = _validFileExtensions[j];
if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {
blnValid = true;
break;
}
}
if (!blnValid) {
alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));
return false;
}
}
}
}
return true;
}
<form onsubmit="return Validate(this);">
File: <input type="file" name="my file" /><br />
<input type="submit" value="Submit" />
</form>
Note, le code permettra à l'utilisateur d'envoyer sans choisir de fichier... si c'est nécessaire, supprimez la ligne if (sFileName.length > 0) {
et le crochet de fermeture qui lui est associé. Le code validera toute entrée de fichier dans le formulaire, quel que soit son nom.
Cela peut être fait avec jQuery en moins de lignes, mais je suis assez à l'aise avec le JavaScript "brut" et le résultat final est le même.
Si vous avez plus de fichiers, ou si vous voulez déclencher la vérification lors du changement de fichier et pas seulement lors de la soumission du formulaire, utilisez ce code à la place :
var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];
function ValidateSingleInput(oInput) {
if (oInput.type == "file") {
var sFileName = oInput.value;
if (sFileName.length > 0) {
var blnValid = false;
for (var j = 0; j < _validFileExtensions.length; j++) {
var sCurExtension = _validFileExtensions[j];
if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {
blnValid = true;
break;
}
}
if (!blnValid) {
alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));
oInput.value = "";
return false;
}
}
}
return true;
}
File 1: <input type="file" name="file1" onchange="ValidateSingleInput(this);" /><br />
File 2: <input type="file" name="file2" onchange="ValidateSingleInput(this);" /><br />
File 3: <input type="file" name="file3" onchange="ValidateSingleInput(this);" /><br />
Cela affichera une alerte et réinitialisera l'entrée en cas d'extension de fichier invalide.
2 votes
Vous utilisez Uploadify comme suggéré dans une de vos questions précédentes, n'est-ce pas ?
0 votes
Non, il s'arrête entre 50 et 96. J'ai essayé de nombreuses fois avec différentes entrées. Et j'étais également pressé de trouver une solution à ce moment-là. J'ai donc essayé une solution simple
jquery.ProgressBar.js
. Cela fonctionne, bien. ### Alors, est-ce que je peux valider avec uploadify !!!0 votes
Ne pouvons-nous pas simplement utiliser l'attribut accept dans la balise input afin de nous assurer que l'utilisateur sélectionne le fichier du format spécifié ?