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");
    }
}