From 599d367343a1c64c8ae755baad8b3420207dcb2d Mon Sep 17 00:00:00 2001 From: Robin Herd Date: Thu, 11 Dec 2014 17:59:52 +0000 Subject: [PATCH 1/2] Fixed bug U4-6004, MediaService.GetMediaByPath now returns IMedia for paths containing 'x' and '_' --- src/Umbraco.Core/Services/MediaService.cs | 25 +++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index f978006c15..34b2c5ab93 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -572,23 +572,32 @@ namespace Umbraco.Core.Services // If the image has been resized we strip the "_403x328" of the original "/media/1024/koala_403x328.jpg" url. if (isResized) { - var underscoreIndex = mediaPath.LastIndexOf('_'); var dotIndex = mediaPath.LastIndexOf('.'); umbracoFileValue = string.Concat(mediaPath.Substring(0, underscoreIndex), mediaPath.Substring(dotIndex)); } - var sql = new Sql() - .Select("*") - .From() - .InnerJoin() - .On(left => left.PropertyTypeId, right => right.Id) - .Where(x => x.Alias == "umbracoFile") - .Where(x => x.VarChar == umbracoFileValue); + Func createSql = url => new Sql().Select("*") + .From() + .InnerJoin() + .On(left => left.PropertyTypeId, right => right.Id) + .Where(x => x.Alias == "umbracoFile") + .Where(x => x.VarChar == url); + + var sql = createSql(umbracoFileValue); using (var uow = _uowProvider.GetUnitOfWork()) { var propertyDataDto = uow.Database.Fetch(sql).FirstOrDefault(); + + // If the stripped-down url returns null, we try again with the original url. + // Previously, the function would fail on e.g. "my_x_image.jpg" + if (propertyDataDto == null) + { + sql = createSql(mediaPath); + propertyDataDto = uow.Database.Fetch(sql).FirstOrDefault(); + } + return propertyDataDto == null ? null : GetById(propertyDataDto.NodeId); } } From c256266432345437860ef42a4c1b800e8128f9cb Mon Sep 17 00:00:00 2001 From: Robin Herd Date: Wed, 17 Dec 2014 13:06:46 +0000 Subject: [PATCH 2/2] isResized now determined by regex --- src/Umbraco.Core/Services/MediaService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 34b2c5ab93..bff06b7f4b 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -567,7 +567,8 @@ namespace Umbraco.Core.Services public IMedia GetMediaByPath(string mediaPath) { var umbracoFileValue = mediaPath; - var isResized = mediaPath.Contains("_") && mediaPath.Contains("x"); + const string Pattern = ".*[_][0-9]+[x][0-9]+[.].*"; + var isResized = Regex.IsMatch(mediaPath, Pattern); // If the image has been resized we strip the "_403x328" of the original "/media/1024/koala_403x328.jpg" url. if (isResized)