示例#1
0
        /// <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
                           ));
            }
        }