Sean Thorne
08/31/2023, 12:56 PMmycooldomain.com/media/airlines/EZY.png
would output the airline logo for EasyJet.Janae
08/31/2023, 4:06 PMSean Thorne
08/31/2023, 11:06 PMJanae
09/01/2023, 3:27 PMprivate static void AddAirlineLogoRoute(RouteCollection routes)
{
routes.MapUmbracoRoute(
"airlineLogoRoutes",
"AirlineLogo/{airline}",
new
{
controller = "AirlineLogo",
action = "GetIcon",
airline = ""
},
new UmbracoVirtualNodeByIdRouteHandler(1072)
);
}
And then the controller that would use the internal index to look up the airline logos by their custom media type and return them to the file stream - basically matching that image to the media item.
public class AirlineLogoController : RenderMvcController
{
public ActionResult GetIcon(RenderModel model, string airline)
{
airline = airline.ToUpper();
airline = airline.Replace("DOT", ".");
//first check in Examine as this is WAY faster
var criteria = ExamineManager.Instance
.SearchProviderCollection["InternalSearcher"]
.CreateSearchCriteria("media");
var filter = criteria.NodeTypeAlias("airlineLogo").And().NodeName(airline);
var results = ExamineManager
.Instance.SearchProviderCollection["InternalSearcher"]
.Search(filter.Compile());
var result = results.FirstOrDefault();
if(result== null)
{
return HttpNotFound();
}
var mediaPath = result.Fields["umbracoFile"];
MediaFileSystem media = FileSystemProviderManager.Current.GetFileSystemProvider<MediaFileSystem>();
MemoryStream outStream = new MemoryStream();
var fileContents = media.OpenFile(mediaPath);
var fac = new ImageFactory();
fac.Load(fileContents);
fac.Format(new JpegFormat());
fac.Save(outStream);
outStream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(outStream, "image/jpeg");
}
}