/// <summary> /// Gets a Static Content Item for a given URL path. /// </summary> /// <param name="urlPath">The URL path (unescaped).</param> /// <param name="localization">The context Localization.</param> /// <returns>The Static Content Item.</returns> public virtual StaticContentItem GetStaticContentItem(string urlPath, Localization localization) { using (new Tracer(urlPath, localization)) { if (WebRequestContext.IsSessionPreview) { // If running under an XPM session preview go directly to BinaryProvider and avoid any // caching logic provided by the BinaryFileManager. We still need to perform image // resizing due to responsive image urls. BinaryFileManager.Dimensions dims; urlPath = BinaryFileManager.StripDimensions(urlPath, out dims); var binary = BinaryFileManager.Provider.GetBinary(localization, urlPath); byte[] binaryData = binary.Item1; if (dims != null && (dims.Width > 0 || dims.Height > 0)) { ImageFormat imgFormat = BinaryFileManager.GetImageFormat(binary.Item2); if (imgFormat != null) { binaryData = BinaryFileManager.ResizeImage(binaryData, dims, imgFormat); } } return(new StaticContentItem( new MemoryStream(binaryData), MimeMapping.GetMimeMapping(binary.Item2), DateTime.Now, Encoding.UTF8)); } MemoryStream memoryStream; Stream dataStream; string localFilePath = BinaryFileManager.Instance.GetCachedFile(urlPath, localization, out memoryStream); if (memoryStream == null) { dataStream = new FileStream(localFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.SequentialScan); } else { dataStream = memoryStream; } return(new StaticContentItem( dataStream, MimeMapping.GetMimeMapping(localFilePath), File.GetLastWriteTime(localFilePath), Encoding.UTF8 )); } }