You are looking to create some sort of HTML element on your site that when clicked will trigger a file download. Seems like a pretty simple request, but there is a little more to it then first appears. By default web browsers will have a set way to handle certain file formats. For example, if you wanted a user to be able to download an image file, simply putting the path of the image in the href, would just open the image in a new tab/window rather than actually download the file. Here is what you need to download a file using ASP MVC.
In order to do this you will need to setup an “ActionResult” on one of your controllers. This means you will be setting the href or source of the link to the URLÂ of the controller. For this example i created a controller called “Services” a method in the controller called “DownloadFile” and this method accepted a value that represented the file. For this you could use some kind of ID that lets you know where to find the file or simple URL encode the file path. This method is probably the easiest, but is not secure. If you are using a public site, you are going to have to setup a DB table to manage the files so that each row has a unique ID that you can use to identify the file. This is what i have done for this example.
I have created a custom document object that works with the DB table. Passing the ID of the row in the constructor (i know its bad practice..but its much quicker). This will pull all of the file information from the database including the path of the file on the disk.
public class ServiceController : Controller { public ActionResult DownloadFile(string id) { CustomDocumentObj document = new CustomDocumentObj(Int32.Parse(id)); string filetype = Helpers.GetMimeType(document.FilePath); return File(document.FilePath, filetype, Path.GetFileName(document.FilePath)); } }
The file path returns a value like “C:/myfiles/somefile.pdf”.
In order to gain access to this file using a download link you will setup a link like the following.
<a href="/Services/DownloadFile/1">Download File</a>
And there you have it, this will trigger the file download in your browser. This can be used to download any file from a windows machine. So long as your server has access to the drive, the file can be downloaded. This means you can download files that are outside of the root of your web servers home directory.