MVC3 Comment vérifier si HttpPostedFileBase est une image
J'ai un contrôleur comme ceci:
public ActionResult Upload (int id, HttpPostedFileBase uploadFile)
{
....
}
Comment puis-je m'assurer que uploadFile est une image (jpg, png, etc.)
J'ai essayé avec
using (var bitmapImage = new Bitmap (uploadFile.InputStream)) {..}
qui jette un ArgumentException si bitmapImage ne peut pas être créé.
Est-il une meilleure manière, par exemple en regardant uploadFile.Nom de fichier?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vérifier l'
HttpPostedFileBase
propriétés de l'objet pour ceAussi, voici une petite méthode, j'ai préparé que vous pouvez utiliser/s'étendre...
J'ai également écrit un article sur ce ici
return formats.Any(item => file.FileName.EndsWith(item, StringComparison.OrdinalIgnoreCase));
Vous pouvez vérifier l'extension du nom de fichier et le type MIME, mais qui pourrait ne pas être fiable, car l'utilisateur peut simplement renommer le fichier avant de le télécharger. Voici un moyen fiable de le faire en regardant le contenu du fichier: https://stackoverflow.com/a/6388927/29407
Vous pouvez bien sûr l'étendre à d'autres type d'image formats PNG, comme ceci:
Ou vous pouvez le vérifier sur côté client thru attribut html "accepter" pour filtrer le fichier le plus vite possible:
cela permettra d'afficher uniquement les types de fichiers définis dans votre accepter d'attribut par défaut. Méfiez-vous, l'utilisateur peut encore changer filetye à "Tous les fichiers", avec cela à l'esprit, mieux vérifier:
Souci résolu
un extrait de code javascript pour vérifier l'extension, et puis faire un peu de montage pour désactiver le bouton en forme:
jusqu'à une extension de fichier est correct. néanmoins l'avoir vérifié sur le côté serveur. 🙂