public static HttpResponseMessage ProcessMaterialDownload(this MaterialModel material, string rootPathName = MaterialUploadModel.DefaultRootPathName) { material.NullCheck("material"); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); FileInfo destFileInfo = null; if (rootPathName.IsNullOrEmpty()) { rootPathName = MaterialUploadModel.DefaultRootPathName; } if (material.Status == MaterualModelStatus.Inserted) { destFileInfo = GetTempUploadFilePath(material.ID, rootPathName, material.OriginalName); } IMaterialContentPersistManager persistManager = GetMaterialContentPersistManager(material.ID, destFileInfo); Stream stream = persistManager.GetMaterialContent(material.ID); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue(GetFileContentType(material.OriginalName)); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("Attachment") { FileName = HttpContext.Current.EncodeFileNameByBrowser(material.OriginalName) }; return(result); }