public async Task <IHttpActionResult> Upload(int id) { if (!Request.Content.IsMimeMultipartContent("form-data")) { return(BadRequest("Unsupported media type")); } try { var provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/uploads/")); var content = new StreamContent(HttpContext.Current.Request.GetBufferlessInputStream(true)); foreach (var header in Request.Content.Headers) { content.Headers.TryAddWithoutValidation(header.Key, header.Value); } await content.ReadAsMultipartAsync(provider); using (var context = new DocumentEntities()) { foreach (var file in provider.FileData) { using (var ts = new TransactionScope()) { var documentMeta = new DocumentMeta { CollectionId = id, FileName = file.Headers.ContentDisposition.Name.Trim(new char[] { '"' }).Replace("&", "and"), UploadTime = DateTime.Now }; context.DocumentMeta.Add(documentMeta); context.SaveChanges(); var documentContent = new DocumentContent { Id = documentMeta.Id, RowGuid = Guid.NewGuid(), Data = new Byte[0] }; context.DocumentContent.Add(documentContent); context.SaveChanges(); using (var stream = File.OpenRead(file.LocalFileName)) { DocumentContentHelper.AddContentData(documentContent.Id, context, stream); } ts.Complete(); } } } return(Ok()); } catch (Exception ex) { return(BadRequest(ex.GetBaseException().Message)); } }
public HttpResponseMessage Get(int id) { using (var context = new DocumentEntities()) { var documentMeta = context.DocumentMeta.FirstOrDefault(d => d.Id == id && d.DeleteTime == null); if (documentMeta == null) { return(new HttpResponseMessage(HttpStatusCode.NotFound)); } var stream = new MemoryStream(); var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = DocumentContentHelper.GetContentData(id, context, stream) }; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = documentMeta.FileName }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return(result); } }