From 12721eb7dd20d6a24c8873f9c0fb36f621116650 Mon Sep 17 00:00:00 2001 From: Jean-Samuel Aubry-Guzzi Date: Tue, 23 Apr 2019 17:31:38 -0400 Subject: [PATCH] Fix non-ascii filename downloads Follow https://tools.ietf.org/html/rfc5987#section-3.2.2 to encode non-ascii filenames in HTTP Content-Disposition header. --- MediaBrowser.Api/Library/LibraryService.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 8eefbdf2ca..9f8da9c168 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -2,6 +2,8 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net; +using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Api.Movies; @@ -828,7 +830,16 @@ namespace MediaBrowser.Api.Library var filename = (Path.GetFileName(path) ?? string.Empty).Replace("\"", string.Empty); if (!string.IsNullOrWhiteSpace(filename)) { - headers[HeaderNames.ContentDisposition] = "attachment; filename=\"" + filename + "\""; + // Kestrel doesn't support non-ASCII characters in headers + if (Regex.IsMatch(filename, "[^[:ascii:]]")) + { + // Manually encoding non-ASCII characters, following https://tools.ietf.org/html/rfc5987#section-3.2.2 + headers[HeaderNames.ContentDisposition] = "attachment; filename*=UTF-8''" + WebUtility.UrlEncode(filename); + } + else + { + headers[HeaderNames.ContentDisposition] = "attachment; filename=\"" + filename + "\""; + } } return ResultFactory.GetStaticFileResult(Request, new StaticFileResultOptions