Laut der MSDN-Dokumentation sollte das FileExtensionsAttribute (.NET 4.5) standardmäßig nur JPG-, JPEG-, GIF- und PNG-Dateien hochladen können - was ich möchte.
Ich habe versucht, ein JPG ohne das Attribut hochzuladen, es funktioniert. Groß. Dann Ich habe das Attribut zu meinem Ansichtsmodell hinzugefügt.
%Vor%Keine Freude. Die Überprüfung schlägt fehl und die ErrorMessage wird angezeigt. Darüber hinaus scheint es keine Möglichkeit zu geben, zulässige benutzerdefinierte Dateierweiterungen anzugeben. Ich habe schließlich das FileExtensionsAttribute erweitert und meine eigene Verifikationslogik verwendet, die wie erwartet funktioniert. Aber warum funktioniert dieser Weg nicht?
Wird den gesamten Controller veröffentlichen und bei Bedarf anzeigen. Ich habe dieses Beispiel als Grundlage für die Upload-Logik verwendet, aber das DataAnnotations.FileExtensionsAttribute anstelle von Microsoft.Web.Mvc.FileExtensions verwendet .. asp.net-mvc-3
Verwenden Sie die Erweiterungen Eigenschaft, um sie festzulegen. Obwohl laut der Dokumentation
Die Dateinamenerweiterungen oder die Standard-Dateierweiterungen (".png", ".jpg", ".jpeg" und ".gif"), wenn die Eigenschaft nicht festgelegt ist.
Sie können es so einstellen, wie Sie das ErrorMessage
getan haben. Das wahrscheinlichere Problem ist, dass es nicht weiß, wie man beurteilen kann, ob HttpPostedFileBase
die richtige Erweiterung hat. Sie müssen das aus dem MVC-Framework verwenden oder ein eigenes erstellen.
Ich weiß, das ist ein bisschen zu spät, aber vielleicht kann das jemandem da draußen helfen. Dies ist eine modifizierte Version von @jfeinour, die auch auf der Client-Seite funktionieren wird:
%Vor%Das FileExtensionsAttribute weiß nicht, wie man eine HttpPostedFileBase verifiziert, also habe ich es erweitert.
%Vor%Beachten Sie, dass diese Methode die Datei dazu zwingt, ein erforderliches Feld zu sein. Wenn es sich um ein optionales Feld handelt, verwenden Sie alternativ den folgenden Code für den Methodenkörper. Dies führt immer zum Erfolg, wenn keine Datei angegeben wurde (in den meisten Fällen wahrscheinlich korrekter).
%Vor%Tags und Links asp.net-mvc-3