02 November 2009 ASP.NET MVC, File, HowTo, Upload Robert Muehsig

image In diesem HowTo wird schnell erklärt, wie man mit Hilfe von  ASP.NET MVC einen Fileupload implementieren kann.

 

Der Controller

Auf der Controller-Seite stellen wir eine ActionMethod namens "FileUpload" bereit:

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult FileUpload(HttpPostedFileBase file)
        {
            ViewData["Message"] = file.FileName + " - " + file.ContentLength.ToString();
            return View("Index");
        }

HttpPostedFileBase ist eine abstrakte Basisklasse und enthält dieselben Eigenschaften wie HttpPostedFile. Sinn dahinter ist, dass man diese Funktionalität auch mit einem UnitTest hinterlegt und sich dabei eigene Ableitungen von der abstrakten Basisklasse machen kann.

Über "file" habe ich in dieser Methode Zugriff auf bestimmte Eigenschaften und kann das File z.B. auch speichern:

image

Nun zum Frontend:

Der View

Im "Index" View erstelle ich über die HTML Helper ein Formular.
Wichtig: Nur wenn enctype="multipart/form-data" angegeben ist, funktioniert der Fileupload!

        <%using(Html.BeginForm("FileUpload", 
                               "Home", 
                               FormMethod.Post,
                               new {enctype = "multipart/form-data"})) { %>
        <input type="file" name="file" id="file" />
        <input type="submit" name="submit" value="Submit" />
        <% } %>

Simpel und fix gemacht :)

Dateigröße

Im Standardfall dürfen nur Files bis 4MB hochgeladen werden. Dies kann aber in der Web.config geändert werden: maxRequestSize

Mehr Informationen

Scott Hanselman hat einen genialen Blogpost darüber verfasst. Auch wie genau Unit-Tests in einem solchen Fall aussehen könnten.

[ Download Democode ]


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!