Пример #1
0
        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);
            }
        }
Пример #2
0
        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));
        }