Débutant ici. Le problème est que j'ai actuellement écrit une méthode qui vérifie la taille du fichier téléchargé et son extension afin de le valider. Toutefois, la vérification des extensions n’est pas une solution, car ce type de validation peut poser de nombreux problèmes. Ce que je veux faire, c'est vérifier le type de fichier actuel et le valider sans utiliser de méthode d'extension. J'ai essayé d'utiliser jQuery file validator mais en vain ... Ceci est un extrait de mon code actuel:
<input type='file' id='imageLoader' name='imageLoader' accept="image/*" data-type='image' />
Scénario:
App.Dispatcher.on("uploadpic", function() {
$(":file").change(function() {
if (this.files && this.files[0] && this.files[0].name.match(/\.(jpg|jpeg|png|gif)$/) ) {
if(this.files[0].size>1048576) {
alert('File size is larger than 1MB!');
}
else {
var reader = new FileReader();
reader.onload = imageIsLoaded;
reader.readAsDataURL(this.files[0]);
}
} else alert('This is not an image file!');
});
function imageIsLoaded(e) {
result = e.target.result;
$('#image').attr('src', result);
};
});
Il est appelé une fois que l'entrée de téléchargement change et après validation, elle télécharge et affiche l'image. Pour le moment, je me soucie uniquement de la validation et toute aide ou idée serait grandement appréciée!
Essayez quelque chose comme ça:
JavaScript
const file = this.files[0];
const fileType = file['type'];
const validImageTypes = ['image/gif', 'image/jpeg', 'image/png'];
if (!validImageTypes.includes(fileType)) {
// invalid file type code goes here.
}
jQuery
var file = this.files[0];
var fileType = file["type"];
var validImageTypes = ["image/gif", "image/jpeg", "image/png"];
if ($.inArray(fileType, validImageTypes) < 0) {
// invalid file type code goes here.
}
Vous n'avez pas besoin de jQuery ici.
var mimeType=this.files[0]['type'];//mimeType=image/jpeg or application/pdf etc...
//ie image/jpeg will be ['image','jpeg'] and we keep the first value
if(mimeType.split('/')[0] === 'image'){
console.log('the file is image');
}
Vous pouvez également créer une fonction pour vérifier quand un fichier est une image.
function isImage(file){
return file['type'].split('/')[0]=='image');//returns true or false
}
isImage(this.file[0]);
Mise à jour (es6)
en utilisant es6 includes
, le rend encore plus simple.
const isImage = (file) => file['type'].includes('image');
Voici un conseil rapide si vous voulez juste savoir si le fichier est une image:
var file = this.files[0];
var fileType = file["type"];
if (fileType.search('image') >= 0) {
...
}
Pls renvoient une requête connexe ici . La réponse proposée ici suggère de charger l'image dans un objet Image et de vérifier que ses propriétés de largeur et de hauteur sont non nulles ... Je pense que la technique peut également être utilisée pour résoudre votre problème.
J'ai également élaboré un violon pour que vous vous référiez. Code pertinent ci-dessous:
var img = new Image();
img.addEventListener("load",function(){
alert('success');
});
img.addEventListener("error",function(){
alert('error');
});
img.src = picFile.result;
Ce que je veux faire est de vérifier le type de fichier actuel
Essayez d'accéder à files[0].type
property. Voir Utilisation de fichiers d'applications Web
$(":file").on("change", function(e) {
console.log(this.files[0].type);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type='file' id='imageLoader' name='imageLoader' accept="image/*" data-type='image' />
Si quelqu'un vient ici et utilise jQuery Validator, une méthode simple serait:
jQuery.validator.addMethod(
"onlyimages",
function (value, element) {
if (this.optional(element) || !element.files || !element.files[0]) {
return true;
} else {
var fileType = element.files[0].type;
var isImage = /^(image)\//i.test(fileType);
return isImage;
}
},
'Sorry, we can only accept image files.'
);
qui est ensuite ajouté à la fonction .validate ().