You can do it by following way : JQuery Method:
var data = new FormData(); data.append("file", filesToUpload[0].rawFile); var doc = {}; doc.DocumentId = 0; $.support.cors = true; $.ajax({ url: '/api/document/uploaddocument', type: 'POST', contentType: 'multipart/form-data', data: data, cache: false, contentType: false, processData: false, success: function (response) { docId = response.split('|')[0]; doc.DocumentId = docId; $.post('/api/document/metadata', doc) .done(function (response) { }); alert('Document save successfully!'); }, error: function (e) { alert(e); } });
call your 'UploadDocuement' web API
[Route("api/document/uploaddocument"), HttpPost] [UnhandledExceptionFilter] [ActionName("UploadDocument")] public Task<HttpResponseMessage> UploadDocument() { // Check if the request contains multipart/form-data. if (!Request.Content.IsMimeMultipartContent()) { Task<HttpResponseMessage> mytask = new Task<HttpResponseMessage>(delegate() { return new HttpResponseMessage() { StatusCode = HttpStatusCode.BadRequest, Content = "In valid file & request content type!".ToStringContent() }; }); return mytask; } string root = HttpContext.Current.Server.MapPath("~/Documents"); if (System.IO.Directory.Exists(root)) { System.IO.Directory.CreateDirectory(root); } var provider = new MultipartFormDataStreamProvider(root); var task = Request.Content.ReadAsMultipartAsync(provider). ContinueWith<HttpResponseMessage>(o => { if (o.IsFaulted || o.IsCanceled) throw new HttpResponseException(HttpStatusCode.InternalServerError); FileInfo finfo = new FileInfo(provider.FileData.First().LocalFileName); string guid = Guid.NewGuid().ToString(); File.Move(finfo.FullName, Path.Combine(root, guid + "_" + provider.FileData.First().Headers.ContentDisposition.FileName.Replace("\"", ""))); string sFileName = provider.FileData.First().Headers.ContentDisposition.FileName.Replace("\"", ""); FileInfo FInfos = new FileInfo(Path.Combine(root, guid + "_" + provider.FileData.First().Headers.ContentDisposition.FileName.Replace("\"", ""))); Document dbDoc = new Document() { DocumentID = 0 }; context.DocumentRepository.Insert(dbDoc); context.Save(); return new HttpResponseMessage() { Content = new StringContent(string.Format("{0}|File uploaded.", dbDoc.DocumentID)) }; } ); return task; }
Call your metadata web api by following way :
[Route("api/document/metadata"), HttpPost] [ActionName("Metadata")] public Task<HttpResponseMessage> Metadata(Document doc) { int DocId = Convert.ToInt32(System.Web.HttpContext.Current.Request.Form["DocumentId"].ToString()); Task<HttpResponseMessage> mytask = new Task<HttpResponseMessage>(delegate() { return new HttpResponseMessage() { Content = new StringContent("metadata updated") }; }); return mytask; }