Introduction
In this post, I am going to explain Part 5 - How to upload files in the ASP.NET Web API using Jquery- Part1 - How to retrieve data from the database in the ASP.NET Web API using Jquery
- Part 2 - How to retrieve data from the database in the ASP.NET Web API using Http Client
- Part 3 - How to post data with validation in the ASP.NET Web API using Jquery
- Part 4 - How to post data with validation in the ASP.NET Web API using Http Client
- Part 5 - How to upload files in the ASP.NET Web API using Jquery
- Part 6 - How to upload files in the ASP.NET Web API using Http Client
- Part 7 - How to retrieve and display data With Paging in the ASP.NET Web API using Jquery
Steps for Web API Application(Service)
Step-1: Add a folder in the WebApi application for save uploaded files
Go to solution explorer > Right click on Project Name(web api) > Add > New Folder > Rename folder (here I renamed "uploadFiles")Step-2: Add a new controller in our WebApi application
Right click on controller folder (in web api application) > Add > Controller > Enter controller name > select "Empty API Controller" from Scaffolding options > Add.Step-3: Add a new Action into the controller (in web api application) for upload file.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Threading.Tasks; using System.Web; using System.Web.Http; namespace WebApiExample.Controllers { public class UploadController : ApiController { public Task<HttpResponseMessage> Post() { List<string> savedFilePath = new List<string>(); if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string rootPath = HttpContext.Current.Server.MapPath("~/uploadFiles"); var provider = new MultipartFileStreamProvider(rootPath); var task = Request.Content.ReadAsMultipartAsync(provider). ContinueWith<HttpResponseMessage>(t => { if (t.IsCanceled || t.IsFaulted) { Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception); } foreach (MultipartFileData item in provider.FileData) { try { string name = item.Headers.ContentDisposition.FileName.Replace("\"", ""); string newFileName = Guid.NewGuid() + Path.GetExtension(name); File.Move(item.LocalFileName, Path.Combine(rootPath, newFileName)); Uri baseuri = new Uri(Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.PathAndQuery, string.Empty)); string fileRelativePath = "~/uploadFiles/" + newFileName; Uri fileFullPath = new Uri(baseuri, VirtualPathUtility.ToAbsolute(fileRelativePath)); savedFilePath.Add(fileFullPath.ToString()); } catch (Exception ex) { string message = ex.Message; } } return Request.CreateResponse(HttpStatusCode.Created, savedFilePath); }); return task; } } }
Steps for Web Application (Client Application)
Here in this example, the client application is "WebApiClient.Web".Step-4: Add an Action to the HomeController (in MVC Client application) for get view for upload file.
public ActionResult Part5() { return View(); }
Step-5: Add view for the Action & design.
Right Click on Action Method (here right click on form action) > Add View... > Enter Name > Add.View
<h2>Part5 - Upload files to the web api using jquery</h2> <div> <div class="form-group"> <div id="updatePanelFile" class="alert" role="alert" style="display:none;"> </div> </div> <div class="form-group"> <input type="file" id="file1"/> </div> <input id="btnPostFile" class="btn btn-default" type="button" value="Upload" /> </div>
Step-6: Add following jquery for upload file to web api
<script> $(document).ready(function () { $('#btnPostFile').click(function () { if ($('#file1').val() == '') { alert('Please select file'); return; } var formData = new FormData(); var file = $('#file1')[0]; formData.append('file', file.files[0]); $.ajax({ url: 'http://localhost:1963/api/Upload', type: 'POST', data: formData, contentType: false, processData: false, success: function (d) { $('#updatePanelFile').addClass('alert-success').html('<strong>Success!</strong><a href="' + d + '">Open File</a>').show(); $('#file1').val(null); }, error: function () { $('#updatePanelFile').addClass('alert-error').html('<strong>Failed!</strong> Please try again.').show(); } }); }); }); </script>Complete View
@{ ViewBag.Title = "Part5"; } <h2>Part5 - Upload files to the web api using jquery</h2> <div> <div class="form-group"> <div id="updatePanelFile" class="alert" role="alert" style="display:none;"> </div> </div> <div class="form-group"> <input type="file" id="file1"/> </div> <input id="btnPostFile" class="btn btn-default" type="button" value="Upload" /> </div> @section Scripts{ <script> $(document).ready(function () { $('#btnPostFile').click(function () { if ($('#file1').val() == '') { alert('Please select file'); return; } var formData = new FormData(); var file = $('#file1')[0]; formData.append('file', file.files[0]); $.ajax({ url: 'http://localhost:1963/api/Upload', type: 'POST', data: formData, contentType: false, processData: false, success: function (d) { $('#updatePanelFile').addClass('alert-success').html('<strong>Success!</strong><a href="' + d + '">Open File</a>').show(); $('#file1').val(null); }, error: function () { $('#updatePanelFile').addClass('alert-error').html('<strong>Failed!</strong> Please try again.').show(); } }); }); }); </script> }
Step-7: Run Application.
Here we need to start both application as the client application will consume services from web api application.Download Live Demo