private void SaveFileAsLogo(IUnitOfWork unitOfWork, Domain.DbModels.File file) { string folder = HttpContext.Current.Server.MapPath(Core.Constants.UploadFilesDirectory); string path = Path.Combine(folder, file.Id.ToString()); if (System.IO.File.Exists(path)) { using (Image original = Image.FromFile(path)) { string logosfolder = HttpContext.Current.Server.MapPath(Core.Constants.LogoFilesDirectory); if (!Directory.Exists(logosfolder)) { Directory.CreateDirectory(logosfolder); } var fileName = string.Format("{0}.jpg", file.Id); var logoPath = Path.Combine(logosfolder, fileName); double scaleSmall = Math.Max(original.Height, original.Width) / 150d; Size s = new Size((int)(original.Width / scaleSmall), (int)(original.Height / scaleSmall)); Image cropped = new Bitmap(original, s); Bitmap image = new Bitmap(cropped); Color backColor = image.GetPixel(1, 1); if (backColor.Name == "0") { image.MakeTransparent(backColor); using (var b = new Bitmap(image.Width, image.Height)) { b.SetResolution(image.HorizontalResolution, image.VerticalResolution); using (var g = Graphics.FromImage(b)) { g.Clear(Color.White); g.DrawImageUnscaled(image, 0, 0); } b.Save(logoPath, ImageFormat.Jpeg); b.Dispose(); } } else { cropped.Save(logoPath, ImageFormat.Jpeg); cropped.Dispose(); } file.LocationPath = logoPath; file.FileName = fileName; file.ContentType = "image/jpeg"; file.IsTemp = false; unitOfWork.FileRepository.Edit(file); unitOfWork.Save(); } //System.IO.File.Delete(path); } }
public async Task <IHttpActionResult> Upload() { HttpRequestMessage request = this.Request; if (!request.Content.IsMimeMultipartContent()) { return(JsonError(HttpStatusCode.BadRequest, 201, "Mime Multipart Content missing")); } var userId = User.Identity.GetUserId(); MultipartMemoryStreamProvider provider = await request.Content.ReadAsMultipartAsync(); Advisr.Domain.DbModels.File dbFile = null; var content = provider.Contents.SingleOrDefault(); if (content is StreamContent) { string fileName = content.Headers.ContentDisposition.FileName.Replace("\"", string.Empty); string mediaType = content.Headers.ContentType.MediaType; string folder = System.Web.HttpContext.Current.Server.MapPath(Core.Constants.UploadFilesDirectory); long fileSize = 0; StreamContent streamContent = (StreamContent)content; if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } try { using (IUnitOfWork unitOfWork = UnitOfWork.Create()) { dbFile = new Domain.DbModels.File(); dbFile.FileName = fileName; dbFile.ContentType = mediaType; dbFile.IsTemp = true; dbFile.CreatedDate = DateTime.Now; dbFile.CreatedById = userId; unitOfWork.FileRepository.Insert(dbFile); await unitOfWork.SaveAsync(); string filePath = Path.Combine(folder, dbFile.Id.ToString()); using (var fileStream = await streamContent.ReadAsStreamAsync()) { using (var file = File.Create(filePath)) { await fileStream.CopyToAsync(file); fileSize = fileStream.Length; } streamContent.Dispose(); } dbFile.FileSize = fileSize; unitOfWork.FileRepository.Edit(dbFile); await unitOfWork.SaveAsync(); } } catch (Exception e) { return(JsonError(HttpStatusCode.BadRequest, 202, e.Message + " " + e.StackTrace)); } } else { return(JsonError(HttpStatusCode.BadRequest, 203, "Content missing")); } var result = new { id = dbFile.Id, fileName = dbFile.FileName, fileSize = dbFile.FileSize, contentType = dbFile.ContentType, url = string.Format("{0}/get/{1}", Url.Link("Default", new { controller = "files" }), dbFile.Id) }; return(this.Ok(result)); }