Пример #1
0
        public IHttpActionResult CreateNewMedia(ImageFilterInstruction imageFilterInstruction)
        {
            var mediaId      = imageFilterInstruction.MediaId;
            var queryString  = imageFilterInstruction.QueryString;
            var mediaService = Services.MediaService;

            // get mediaItem
            var mediaItem      = mediaService.GetById(mediaId);
            var mediaItemAlias = mediaItem.ContentType.Alias;

            if (mediaItem == null)
            {
                return(BadRequest(string.Format("Couldn't find the media item to adjust")));
            }
            var umbracoFile = mediaItem.GetValue <string>("umbracoFile");

            if (String.IsNullOrEmpty(umbracoFile))
            {
                return(BadRequest(string.Format("Couldn't retrieve the umbraco file details of the item to adjust")));
            }

            bool   isNew          = mediaItem.Id <= 0;
            string serverFilePath = GetServerFilePath(mediaItem, isNew);
            string newFileName    = Guid.NewGuid() + Path.GetExtension(serverFilePath);

            if (serverFilePath != null)
            {
                using (ImageFactory imageFactory = new ImageFactory(false))
                {
                    var imageToAdjust = imageFactory.Load(serverFilePath);
                    var ms            = new MemoryStream();

                    NameValueCollection settings = HttpUtility.ParseQueryString(imageFilterInstruction.QueryString);

                    string setting = settings.GetKey(0);
                    string value   = settings.Get(0);

                    switch (setting)
                    {
                    case "brightness":
                        imageToAdjust.Brightness(int.Parse(value)).Save(ms);
                        break;

                    case "contrast":
                        imageToAdjust.Contrast(int.Parse(value)).Save(ms);
                        break;

                    case "filter":
                        //TODO
                        imageToAdjust.Save(ms);
                        break;

                    case "flip":
                        imageToAdjust.Flip(flipVertically: value == "vertical", flipBoth: value == "both");
                        break;

                    case "rotate":
                        imageToAdjust.Rotate(int.Parse(value));
                        break;
                    }

                    ms.Position = 0;
                    var    memoryStreamPostedFile = new MemoryStreamPostedFile(ms, newFileName);
                    string newMediaName           = mediaItem.Name + queryString.Replace("?", " ").Replace("=", " ");
                    var    newMediaItem           = mediaService.CreateMedia(newMediaName, mediaItem.ParentId, mediaItemAlias);
                    newMediaItem.SetValue(Constants.Conventions.Media.File, memoryStreamPostedFile);
                    mediaService.Save(newMediaItem);
                    ms.Dispose();
                    return(Ok(newMediaItem.Id));
                }
            }
            return(BadRequest(string.Format("Couldn't find the media item to adjust")));
        }
Пример #2
0
        public IHttpActionResult CreateNewMedia(ImageFilterInstruction imageFilterInstruction)
        {
            try
            {
                var mediaId          = imageFilterInstruction.MediaId;
                var queryString      = imageFilterInstruction.QueryString;
                var mediaService     = Current.Services.MediaService;
                var mediaTypeService = Current.Services.MediaTypeService;
                var mediaItem        = mediaService.GetById(mediaId);
                var mediaItemAlias   = mediaItem.ContentType.Alias;

                var umbracoFile = mediaItem.GetValue <string>("umbracoFile");
                if (String.IsNullOrEmpty(umbracoFile))
                {
                    return(BadRequest(string.Format("Couldn't retrieve the umbraco file details of the item to adjust")));
                }

                bool   isNew          = mediaItem.Id <= 0;
                string serverFilePath = GetServerFilePath(mediaItem, isNew);
                if (serverFilePath != null)
                {
                    FileInfo fileInfo = new FileInfo(serverFilePath);
                    var      fileName = fileInfo.Name;

                    string mediaPath   = "";
                    string newFilePath = "";

                    if (imageFilterInstruction.OverwriteExisting)
                    {
                        newFilePath = serverFilePath;
                    }
                    else
                    {
                        mediaPath = "/media/"
                                    + _mediaPathScheme.GetFilePath(Current.MediaFileSystem, Guid.NewGuid(),
                                                                   new Guid("1df9f033-e6d4-451f-b8d2-e0cbc50a836f"), fileName);

                        newFilePath = HttpContext.Current.Server.MapPath(mediaPath);
                    }

                    using (ImageFactory imageFactory = new ImageFactory(false))
                    {
                        var imageToAdjust            = imageFactory.Load(serverFilePath);
                        NameValueCollection settings = HttpUtility.ParseQueryString(imageFilterInstruction.QueryString);

                        var settingCount = settings.Count;
                        if (settingCount > 0)
                        {
                            for (var i = 0; i < settingCount; i++)
                            {
                                var setting = settings.GetKey(i);
                                var value   = settings.Get(i);

                                ApplyFilterSetting(imageToAdjust, setting, value);
                            }
                        }

                        imageToAdjust.Save(newFilePath);

                        if (imageFilterInstruction.OverwriteExisting)
                        {
                            return(Ok(mediaId));
                        }
                        else
                        {
                            string newMediaName = mediaItem.Name + queryString.Replace("?", " ")
                                                  .Replace("=", " ")
                                                  .Replace("&", " ");

                            var newMediaId = CreateMediaItem(mediaService, mediaTypeService, mediaItem.ParentId, mediaItemAlias,
                                                             Guid.NewGuid(), newMediaName, mediaPath);

                            return(Ok(newMediaId));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(typeof(ImageFilterBackofficeApiController), ex, "There was a problem when trying to create the media item");
                return(BadRequest(string.Format("There was a problem when trying to create the media item")));
            }
            return(BadRequest(string.Format("Couldn't find the media item to adjust")));
        }