From 68ff77f5b66284ab4af85b42686ed7908bc3abcf Mon Sep 17 00:00:00 2001 From: TimoPerplex Date: Fri, 24 Jul 2015 16:27:26 +0200 Subject: [PATCH 1/3] This commit removes the hardcoded .jpg thumbnails This commit removes the hardcoded .jpg thumbnails and uses the image original extension to create the thumbnail. Because we now use the original extension the image is no longer masked as another (extension is .jpg but the file is actually a .png) This fixes issues with Internet Explorer used in combination with the no-sniff header. Ref topic: https://our.umbraco.org/forum/umbraco-7/using-umbraco-7/66788-adding-nosniff-header-breaks-png-images-in-internet-explorer --- src/Umbraco.Core/IO/UmbracoMediaFile.cs | 4 ++-- src/Umbraco.Core/Media/ImageHelper.cs | 18 ++++++++++++------ .../umbraco/plugins/tinymce3/insertImage.aspx | 2 +- src/Umbraco.Web/Editors/ImagesController.cs | 7 ++++--- .../ImageThumbnailProvider.cs | 2 +- .../controls/Images/ImageViewer.ascx.cs | 2 +- .../controls/Images/UploadMediaImage.ascx.cs | 2 +- .../umbraco/dialogs/imageViewer.aspx.cs | 2 +- .../umbraco/plugins/tinymce3/insertImage.aspx | 2 +- .../umbraco/uQuery/MediaExtensions.cs | 2 +- 10 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/Umbraco.Core/IO/UmbracoMediaFile.cs b/src/Umbraco.Core/IO/UmbracoMediaFile.cs index b8fe310f54..d708fcb804 100644 --- a/src/Umbraco.Core/IO/UmbracoMediaFile.cs +++ b/src/Umbraco.Core/IO/UmbracoMediaFile.cs @@ -199,8 +199,8 @@ namespace Umbraco.Core.IO using (var image = Image.FromStream(fs)) { var fileNameThumb = string.IsNullOrWhiteSpace(fileNameAddition) - ? string.Format("{0}_UMBRACOSYSTHUMBNAIL.jpg", Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal))) - : string.Format("{0}_{1}.jpg", Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal)), fileNameAddition); + ? string.Format("{0}_UMBRACOSYSTHUMBNAIL." + Extension, Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal))) + : string.Format("{0}_{1}." + Extension, Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal)), fileNameAddition); var thumbnail = maxWidthHeight == -1 ? ImageHelper.GenerateThumbnail(image, width, height, fileNameThumb, Extension, _fs) diff --git a/src/Umbraco.Core/Media/ImageHelper.cs b/src/Umbraco.Core/Media/ImageHelper.cs index 5842bb67bb..9f5838fef5 100644 --- a/src/Umbraco.Core/Media/ImageHelper.cs +++ b/src/Umbraco.Core/Media/ImageHelper.cs @@ -122,8 +122,8 @@ namespace Umbraco.Core.Media private static ResizedImage Resize(IFileSystem fileSystem, string path, string extension, int maxWidthHeight, string fileNameAddition, Image originalImage) { var fileNameThumb = String.IsNullOrEmpty(fileNameAddition) - ? string.Format("{0}_UMBRACOSYSTHUMBNAIL.jpg", path.Substring(0, path.LastIndexOf("."))) - : string.Format("{0}_{1}.jpg", path.Substring(0, path.LastIndexOf(".")), fileNameAddition); + ? string.Format("{0}_UMBRACOSYSTHUMBNAIL." + extension, path.Substring(0, path.LastIndexOf("."))) + : string.Format("{0}_{1}." + extension, path.Substring(0, path.LastIndexOf(".")), fileNameAddition); var thumb = GenerateThumbnail( originalImage, @@ -202,10 +202,16 @@ namespace Umbraco.Core.Media // Copy metadata var imageEncoders = ImageCodecInfo.GetImageEncoders(); - - var codec = extension.ToLower() == "png" || extension.ToLower() == "gif" - ? imageEncoders.Single(t => t.MimeType.Equals("image/png")) - : imageEncoders.Single(t => t.MimeType.Equals("image/jpeg")); + var codec = imageEncoders.Single(t => t.MimeType.Equals("image/jpeg")); // default "jpg" + switch (extension.ToLower()) + { + case "png": codec = imageEncoders.Single(t => t.MimeType.Equals("image/png")); break; + case "gif": codec = imageEncoders.Single(t => t.MimeType.Equals("image/gif")); break; + case "tif": + case "tiff": codec = imageEncoders.Single(t => t.MimeType.Equals("image/tiff")); break; + case "bmp": codec = imageEncoders.Single(t => t.MimeType.Equals("image/bmp")); break; + default: break; + } // Set compresion ratio to 90% var ep = new EncoderParameters(); diff --git a/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx b/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx index 6388b243ee..21d18dd7ad 100644 --- a/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx +++ b/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx @@ -133,7 +133,7 @@ //get the thumb of the image var src = document.forms[0].src.value; var ext = src.split('.').pop(); - var thumb = src.replace("." + ext, "_thumb.jpg"); + var thumb = src.replace("." + ext, "_thumb." + ext); if (src != "") jQuery("#<%=ImageViewer.ClientID%>").UmbracoImageViewerAPI().showImage(thumb); } }, 500); diff --git a/src/Umbraco.Web/Editors/ImagesController.cs b/src/Umbraco.Web/Editors/ImagesController.cs index 54938be76d..18b30be1aa 100644 --- a/src/Umbraco.Web/Editors/ImagesController.cs +++ b/src/Umbraco.Web/Editors/ImagesController.cs @@ -124,7 +124,7 @@ namespace Umbraco.Web.Editors return Request.CreateResponse(HttpStatusCode.NotFound); } - var thumbFilePath = imagePath.TrimEnd(ext) + "_" + suffix + ".jpg"; + var thumbFilePath = imagePath.TrimEnd(ext) + "_" + suffix + ext; var fullOrgPath = mediaFileSystem.GetFullPath(mediaFileSystem.GetRelativePath(imagePath)); var fullNewPath = mediaFileSystem.GetFullPath(mediaFileSystem.GetRelativePath(thumbFilePath)); var thumbIsNew = mediaFileSystem.FileExists(fullNewPath) == false; @@ -148,7 +148,7 @@ namespace Umbraco.Web.Editors originalImage, width, fullNewPath, - "jpg", + ext.Replace(".", ""), mediaFileSystem); } else @@ -168,7 +168,8 @@ namespace Umbraco.Web.Editors if (stream.CanSeek) stream.Seek(0, 0); result.Content = new StreamContent(stream); result.Headers.Date = mediaFileSystem.GetLastModified(imagePath); - result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); + result.Content.Headers.ContentType = new MediaTypeHeaderValue(System.Web.MimeMapping.GetMimeMapping(imagePath)); + return result; } } diff --git a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs index a2777c0137..6f9b26c79d 100644 --- a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs +++ b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs @@ -33,7 +33,7 @@ namespace Umbraco.Web.Media.ThumbnailProviders return false; // Make sure the thumbnail exists - var tmpThumbUrl = fileUrl.Replace(ext, "_thumb.jpg"); + var tmpThumbUrl = fileUrl.Replace(ext, "_thumb" + ext); try { diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs index eaf2eb5b82..98362dd638 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs @@ -110,7 +110,7 @@ namespace umbraco.controls.Images } string ext = MediaItemPath.Substring(MediaItemPath.LastIndexOf(".") + 1, MediaItemPath.Length - MediaItemPath.LastIndexOf(".") - 1); - MediaItemThumbnailPath = MediaItemPath.Replace("." + ext, "_thumb.jpg"); + MediaItemThumbnailPath = MediaItemPath.Replace("." + ext, "_thumb." + ext); ImageFound = true; } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs index 71b32f2b61..24d115c6d6 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs @@ -81,7 +81,7 @@ namespace umbraco.controls.Images //this seems real ugly since we apparently already have the properties above (props)... but this data layer is insane and undecipherable:) string mainImage = media.getProperty(Constants.Conventions.Media.File).Value.ToString(); string extension = mainImage.Substring(mainImage.LastIndexOf(".") + 1, mainImage.Length - mainImage.LastIndexOf(".") - 1); - var thumbnail = mainImage.Remove(mainImage.Length - extension.Length - 1, extension.Length + 1) + "_thumb.jpg"; + var thumbnail = mainImage.Remove(mainImage.Length - extension.Length - 1, extension.Length + 1) + "_thumb." + extension; string width = media.getProperty(Constants.Conventions.Media.Width).Value.ToString(); string height = media.getProperty(Constants.Conventions.Media.Height).Value.ToString(); int id = media.Id; diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs index 3a2917f24f..f7f129dbed 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs @@ -76,7 +76,7 @@ namespace umbraco.dialogs } var fileNameOrg = fileName; var ext = fileNameOrg.Substring(fileNameOrg.LastIndexOf(".") + 1, fileNameOrg.Length - fileNameOrg.LastIndexOf(".") - 1); - var fileNameThumb = SystemDirectories.Root + fileNameOrg.Replace("." + ext, "_thumb.jpg"); + var fileNameThumb = SystemDirectories.Root + fileNameOrg.Replace("." + ext, "_thumb." + ext); image.Controls.Add(new LiteralControl("")); } catch diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx index 1ae2936713..7c4a878ee5 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx @@ -133,7 +133,7 @@ //get the thumb of the image var src = document.forms[0].src.value; var ext = src.split('.').pop(); - var thumb = src.replace("." + ext, "_thumb.jpg"); + var thumb = src.replace("." + ext, "_thumb." + ext); if (src != "") jQuery("#<%=ImageViewer.ClientID%>").UmbracoImageViewerAPI().showImage(thumb); } }, 500); diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs index f52100d9c9..42b9cd757b 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs @@ -216,7 +216,7 @@ namespace umbraco if (!string.IsNullOrEmpty(url)) { var extension = media.GetProperty(Constants.Conventions.Media.Extension); - return url.Replace(string.Concat(".", extension), "_thumb.jpg", StringComparison.InvariantCultureIgnoreCase); + return url.Replace(string.Concat(".", extension), "_thumb." + extension, StringComparison.InvariantCultureIgnoreCase); } } From 95a9e4b5ffc273de67a85c97506da56d08923b4b Mon Sep 17 00:00:00 2001 From: TimoPerplex Date: Tue, 27 Oct 2015 13:09:21 +0100 Subject: [PATCH 2/3] Latest --- src/Umbraco.Web.UI/Umbraco/umbraco.aspx | 2 - src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs | 19 --------- .../Umbraco/umbraco.aspx.designer.cs | 15 ------- src/Umbraco.Web.UI/umbraco/Logout.aspx | 42 ------------------- 4 files changed, 78 deletions(-) delete mode 100644 src/Umbraco.Web.UI/Umbraco/umbraco.aspx delete mode 100644 src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs delete mode 100644 src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs delete mode 100644 src/Umbraco.Web.UI/umbraco/Logout.aspx diff --git a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx deleted file mode 100644 index c90ca1da73..0000000000 --- a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx +++ /dev/null @@ -1,2 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="umbraco.aspx.cs" Inherits="Umbraco.Web.UI.Umbraco.umbraco" %> - diff --git a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs deleted file mode 100644 index 91bc61dc6f..0000000000 --- a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using Umbraco.Core.Configuration; - -namespace Umbraco.Web.UI.Umbraco -{ - public partial class umbraco : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - Response.Status = "301 Moved Permanently"; - Response.AddHeader("Location", GlobalSettings.Path); - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs deleted file mode 100644 index e98415eb53..0000000000 --- a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs +++ /dev/null @@ -1,15 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Umbraco.Web.UI.Umbraco { - - - public partial class umbraco { - } -} diff --git a/src/Umbraco.Web.UI/umbraco/Logout.aspx b/src/Umbraco.Web.UI/umbraco/Logout.aspx deleted file mode 100644 index 2b6ec88946..0000000000 --- a/src/Umbraco.Web.UI/umbraco/Logout.aspx +++ /dev/null @@ -1,42 +0,0 @@ -<%@ Page Language="C#" %> -<%@ Import Namespace="Umbraco.Core" %> -<%@ Import Namespace="Umbraco.Core.IO" %> -<%@ Import Namespace="Umbraco.Web" %> - - - - - - - - Logout - - - - - From 43baba1733a24be4fe655e3d98d79f51cb30b197 Mon Sep 17 00:00:00 2001 From: TimoPerplex Date: Tue, 27 Oct 2015 13:10:25 +0100 Subject: [PATCH 3/3] Revert "Latest" This reverts commit 95a9e4b5ffc273de67a85c97506da56d08923b4b. --- src/Umbraco.Web.UI/Umbraco/umbraco.aspx | 2 + src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs | 19 +++++++++ .../Umbraco/umbraco.aspx.designer.cs | 15 +++++++ src/Umbraco.Web.UI/umbraco/Logout.aspx | 42 +++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 src/Umbraco.Web.UI/Umbraco/umbraco.aspx create mode 100644 src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs create mode 100644 src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs create mode 100644 src/Umbraco.Web.UI/umbraco/Logout.aspx diff --git a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx new file mode 100644 index 0000000000..c90ca1da73 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx @@ -0,0 +1,2 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="umbraco.aspx.cs" Inherits="Umbraco.Web.UI.Umbraco.umbraco" %> + diff --git a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs new file mode 100644 index 0000000000..91bc61dc6f --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using Umbraco.Core.Configuration; + +namespace Umbraco.Web.UI.Umbraco +{ + public partial class umbraco : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + Response.Status = "301 Moved Permanently"; + Response.AddHeader("Location", GlobalSettings.Path); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs new file mode 100644 index 0000000000..e98415eb53 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/umbraco.aspx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Umbraco.Web.UI.Umbraco { + + + public partial class umbraco { + } +} diff --git a/src/Umbraco.Web.UI/umbraco/Logout.aspx b/src/Umbraco.Web.UI/umbraco/Logout.aspx new file mode 100644 index 0000000000..2b6ec88946 --- /dev/null +++ b/src/Umbraco.Web.UI/umbraco/Logout.aspx @@ -0,0 +1,42 @@ +<%@ Page Language="C#" %> +<%@ Import Namespace="Umbraco.Core" %> +<%@ Import Namespace="Umbraco.Core.IO" %> +<%@ Import Namespace="Umbraco.Web" %> + + + + + + + + Logout + + + + +