Skip to main content
3 of 4
minor code fix

Here is the my final solution after the leads from other answers here. I use the media:request event along with the lesser known AddOnSendingHeaders method on Request object that basically gives me a final chance to change headers before IIS sends the request to the client.

public class ChangeFileName
{
    public void OnMediaRequest(object sender, EventArgs args)
    {
        SitecoreEventArgs eventArgs = args as SitecoreEventArgs;

        MediaRequest mediaRequest = eventArgs?.Parameters?[0] as MediaRequest;


        if (mediaRequest == null)
        {
            return;
        }

        MediaItem mediaItem = MediaManager.GetMedia(mediaRequest.MediaUri).MediaData.MediaItem;

        if(mediaItem == null)
        {
            return;
        }

        HttpRequest request = mediaRequest.InnerRequest;

        request.RequestContext.HttpContext.Response.AddOnSendingHeaders(context =>
        {
            if (CheckFileType(mediaItem))
                context.Response.Headers["Content-Disposition"] = FixFileName(context.Response.Headers["Content-Disposition"]));
        });
    }

}

Then of course, I had to add the event handler to the config:

<event name="media:request">
        <handler type="MyAssembly.ChangeFileName, MyAssembly" method="OnMediaRequest"/>
      </event>