Upload/ Download Files In ASP.NET Core 2.0

Problem

How to upload and download files in ASP.NET Core MVC.

Solution

In an empty project, update the Startup class to add services and middleware for MVC.

Add a Controller and action methods to upload and download the file.

Add a Razor page with HTML form to upload a file.

Discussion Uploading

ASP.NET Core MVC model binding provides IFormFile interface to upload one or more files. The HTML form must have the encoding type set to multipart/form-data and an input element with typeattribute set to file.

You could also upload multiple files by receiving a list of IFormFile in action method and setting input element with multiple attribute.

You could also have IFormFile as a property on model received by the action method.

Note

The name on input elements must match action parameter name (or model property name) for model binding to work. This is no different than model binding of simple and complex types.

Downloading

Action method needs to return FileResult with either a streambyte[], or virtual path of the file. You will also need to know the content-type of the file being downloaded. Here is a sample (quick/dirty) utility method.

Source Code

GitHub