/// <summary> /// Processes dimensions for dynamically scaled images according to configuration. /// /// </summary> /// <param name="request">The media request.</param><param name="media">The media.</param> private void ProcessImageDimensions(MediaRequest request, Sitecore.Resources.Media.Media media) { Assert.ArgumentNotNull((object)request, "request"); Assert.ArgumentNotNull((object)media, "media"); Item innerItem = media.MediaData.MediaItem.InnerItem; int result1; int.TryParse(innerItem["Height"], out result1); int result2; int.TryParse(innerItem["Width"], out result2); bool flag = false; int maxHeight = Settings.Media.Resizing.MaxHeight; if (maxHeight != 0 && request.Options.Height > Math.Max(maxHeight, result1)) { flag = true; request.Options.Height = Math.Max(maxHeight, result1); } int maxWidth = Settings.Media.Resizing.MaxWidth; if (maxWidth != 0 && request.Options.Width > Math.Max(maxWidth, result2)) { flag = true; request.Options.Width = Math.Max(maxWidth, result2); } if (!flag) { return; } Log.Warn(string.Format("Requested image exceeds allowed size limits. Requested URL:{0}", (object)request.InnerRequest.RawUrl), (object)this); }
protected override bool DoProcessRequest(HttpContext context) { Assert.ArgumentNotNull((object)context, "context"); //Sitecore produces media search result icons with wrong querystring (2 question marks): // "?h=48&thn=1&w=48&db=master?w=80&h=60&db=master" // using the 1st part only "?h=48&thn=1&w=48&db=master" and redirect to the fixed url: FixSearchResultIconUrl(context.Request); MediaRequest request = MediaManager.ParseMediaRequest(context.Request); if (request == null) { return(false); } Sitecore.Resources.Media.Media media = MediaManager.GetMedia(request.MediaUri); // handle 404 of media items if (media == null) { using (new SecurityDisabler()) media = MediaManager.GetMedia(request.MediaUri); string str; if (media == null) { str = Settings.ItemNotFoundUrl; } else { Assert.IsNotNull(Sitecore.Context.Site, "site"); str = Sitecore.Context.Site.LoginPage != string.Empty ? Sitecore.Context.Site.LoginPage : Settings.NoAccessUrl; } if (Settings.RequestErrors.UseServerSideRedirect) { HttpContext.Current.Server.TransferRequest(str); } else { HttpContext.Current.Response.Redirect(str); } return(true); } if (!IsCdnMedia(media)) { return(base.DoProcessRequest(context)); } if (request.Options.Thumbnail) { request.Options.UseMediaCache = false; return(base.DoProcessRequest(context, request, media)); } return(this.DoProcessRequest(context, media)); }
private bool DoProcessRequest(HttpContext context, Sitecore.Resources.Media.Media media) { var helper = new MediaHelper(media.MediaData.MediaItem); string redirectUrl = helper.GetCloudBasedMediaUrl(); context.Response.Redirect(redirectUrl, false); context.ApplicationInstance.CompleteRequest(); return(true); }
private bool DoProcessRequest(HttpContext context, Sitecore.Resources.Media.Media media) { //var helper = new MediaHelper(media.MediaData.MediaItem); //string redirectUrl = helper.GetCloudBasedMediaUrl(); //all blob urls set to expire in 24h (1440 minutes) var redirectUrl = _provider.GetUrlWithSasToken(media.MediaData.MediaItem, 1440); context.Response.Redirect(redirectUrl, false); context.ApplicationInstance.CompleteRequest(); return(true); }
public static long ProcessMediaItem(MediaItem mediaItem, CrunchOptions crunchOptions) { long resultantSize = 0; if (crunchOptions.IsEnabled) { if (mediaItem.MimeType == "image/jpeg" || mediaItem.MimeType == "image/pjpeg" || mediaItem.MimeType == "image/gif" || mediaItem.MimeType == "image/png") { ICruncher cruncher = Cruncher.GetCruncher(); if (cruncher == null) { Log.Error("Could not find cruncher!", typeof(CrunchImage)); return(resultantSize); } if (mediaItem.Size >= cruncher.MaxImageSize) { return(resultantSize); } var mediaStream = mediaItem.GetMediaStream(); Job job = Context.Job; try { CrunchResult result = cruncher.CrunchStream(mediaStream, crunchOptions); if (result == null) { Log.Error(string.Format("Could not shrink media file {0}", mediaItem.InnerItem.Paths.Path), typeof(CrunchImage)); } Sitecore.Resources.Media.Media media = MediaManager.GetMedia(mediaItem); using (var stream = new MemoryStream()) { result.FileStream.CopyTo(stream); stream.Position = 0; resultantSize = stream.Length; media.SetStream(stream, Path.GetExtension(result.Format).TrimStart('.')); } } catch (Exception exception) { if (job != null) { job.Status.LogError("Image could not be reduced in size"); } Log.Error(string.Format("Image crunch failed: {0}", mediaItem.InnerItem.Paths.FullPath), exception, (typeof(CrunchImage))); } } } return(resultantSize); }
protected override Tristate Modified(HttpContext context, Sitecore.Resources.Media.Media media, MediaOptions options) { string str1 = context.Request.Headers["If-None-Match"]; if (!string.IsNullOrEmpty(str1) && str1 != media.MediaData.MediaId) { return(Tristate.True); } string str2 = context.Request.Headers["If-Modified-Since"]; if (!string.IsNullOrEmpty(str2)) { DateTime result; if (DateTime.TryParse(str2.Split(';')[0].Replace(" UTC", " GMT"), out result)) { return(MainUtil.GetTristate(!this.CompareDatesWithRounding(result, media.MediaData.Updated, new TimeSpan(0, 0, 1)))); } Log.Warn(string.Format("Can't parse header. The wrong value - \"If-Modified-Since: {0}\" ", (object)str2), (object)typeof(MediaRequestHandler)); } return(Tristate.Undefined); }
protected override bool DoProcessRequest(HttpContext context) { Assert.ArgumentNotNull((object)context, "context"); MediaRequest request = MediaManager.ParseMediaRequest(context.Request); if (request == null) { return(false); } Sitecore.Resources.Media.Media media = MediaManager.GetMedia(request.MediaUri); if (!IsCdnMedia(media)) { return(base.DoProcessRequest(context)); } if (request.Options.Thumbnail) { request.Options.UseMediaCache = false; return(base.DoProcessRequest(context, request, media)); } return(this.DoProcessRequest(context, media)); }
private bool IsCdnMedia(Sitecore.Resources.Media.Media media) { return(media != null && media.MediaData.MediaItem.FileBased); }
protected override bool DoProcessRequest(HttpContext context, MediaRequest request, Sitecore.Resources.Media.Media media) { Assert.ArgumentNotNull((object)context, "context"); Assert.ArgumentNotNull((object)request, "request"); Assert.ArgumentNotNull((object)media, "media"); if (this.Modified(context, media, request.Options) == Tristate.False) { Event.RaiseEvent("media:request", new object[1] { (object)request }); this.SendMediaHeaders(media, context); context.Response.StatusCode = 304; return(true); } this.ProcessImageDimensions(request, media); MediaStream stream = media.GetStream(request.Options); if (stream == null) { return(false); } Event.RaiseEvent("media:request", new object[1] { (object)request }); if (Settings.Media.EnableRangeRetrievalRequest && Settings.Media.CachingEnabled) { using (stream) { this.SendMediaHeaders(media, context); new RangeRetrievalResponse(RangeRetrievalRequest.BuildRequest(context, media), stream).ExecuteRequest(context); return(true); } } else { this.SendMediaHeaders(media, context); this.SendStreamHeaders(stream, context); using (stream) { context.Response.AddHeader("Content-Length", stream.Stream.Length.ToString()); WebUtil.TransmitStream(stream.Stream, context.Response, Settings.Media.StreamBufferSize); } return(true); } }
protected override bool DoProcessRequest(HttpContext context, MediaRequest request, Sitecore.Resources.Media.Media media) { if (Context.Database.Name.ToLower() != "core") { string mediaId = media.MediaData.MediaItem.ID.ToString(); Item disclaimerFolder = Context.Database.GetItem("/sitecore/content/Global/Settings/Disclaimers"); if (disclaimerFolder != null) { foreach (Item disc in disclaimerFolder.Children) { if (disc["Media To Protect"].IndexOf(mediaId) >= 0) { string disclaimerPageId = disc["Disclaimer Page"]; Item item = Context.Database.GetItem(new ID(disclaimerPageId)); string url = LinkManager.GetItemUrl(item); ShowDisclaimer(mediaId, url); break; } } } } return(base.DoProcessRequest(context, request, media)); }
/// <summary> /// Process the current request and return false if the media item was not found, so Sitecore /// can go ahead with processing the pipelines. Also check the <c>availableLanguages</c> /// from the current <see cref="Sitecore.Sites.SiteContext"/> to check for a valid language /// version of the media. /// </summary> /// <param name="context">Current <see cref="System.Web.HttpContext"/>.</param> /// <returns><c>True</c> if everything was OK, <c>false</c> if the request is invalid or the media was not found.</returns> protected override bool DoProcessRequest(HttpContext context) { Assert.ArgumentNotNull(context, "context"); Assert.IsNotNull(Sitecore.Context.Site, "site"); MediaRequest mediaRequest = MediaManager.ParseMediaRequest(context.Request); if (mediaRequest == null) { return(false); } bool notfound = false; bool noaccess = false; string redirect = string.Empty; Language lang = UrlUtil.ResolveLanguage(); // get media Sitecore.Resources.Media.Media media = MediaManager.GetMedia(mediaRequest.MediaUri); // check item in language Item mediaItem = Sitecore.Context.Database.GetItem(mediaRequest.MediaUri.MediaPath); if (Sitecore.Context.GetSiteName() != "shell" && (mediaItem == null || (!mediaItem.Fields["Blob"].Shared && !mediaItem.HasLanguageVersion(lang, Sitecore.Context.Site.Properties["availableLanguages"])))) { notfound = true; } // check for media if (media == null) { using (new SecurityDisabler()) { media = MediaManager.GetMedia(mediaRequest.MediaUri); } if (media == null) { notfound = true; } else { noaccess = true; } } // generate redirect url if (notfound) { redirect = Sitecore.Configuration.Settings.ItemNotFoundUrl; } else if (noaccess) { redirect = ((Sitecore.Context.Site.LoginPage != string.Empty) ? Sitecore.Context.Site.LoginPage : Sitecore.Configuration.Settings.NoAccessUrl); } // redirect if needed if (!string.IsNullOrEmpty(redirect)) { if (Sitecore.Configuration.Settings.RequestErrors.UseServerSideRedirect) { HttpContext.Current.Server.Transfer(redirect); } else { HttpContext.Current.Response.Redirect(redirect); } return(false); } return(this.DoProcessRequest(context, mediaRequest, media)); }