In this article, you will learn how to download a file in Web API MVC. We will use HTTP Get API method to perform this download action with one single parameter which will accept the file name. Here is the full code.
//import namespaces using System.IO; using System.Net.Http.Headers; [HttpGet] public HttpResponseMessage DownloadFile(string fileName) { if (!string.IsNullOrEmpty(fileName)) { string filePath = "/images/"; string fullPath = AppDomain.CurrentDomain.BaseDirectory + filePath + "/" + fileName; if (File.Exists(fullPath)) { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); var fileStream = new FileStream(fullPath, FileMode.Open); response.Content = new StreamContent(fileStream); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); response.Content.Headers.ContentDisposition.FileName = fileName; return response; } } return new HttpResponseMessage(HttpStatusCode.NotFound); }
So how does the code work? Basically, the API will accept a query string which is the file name. We can get the root path of our project by using the following code.
AppDomain.CurrentDomain.BaseDirectory
What we need to do next is to make sure if the user has passed the file name in the query string and if they are, we then check using System.IO.File to see if the file exists on the server. To test it, you can just need to call the API path in your HTML code. See example below and change the API path accordingly as this is just an example only.
<a href='/APIPath/DownloadFile?fileName=ImageName.jpg'>Download file</a>