Некорректное имя файла при сохранении в PDF из IE 11
Добавлено: 23 июл 2015, 08:50
StiMvcViewer, версия 2015.1.11
При просмотре отчета есть возможность сохранить его прямо из Viewer'а во множество форматов, например PDF.
Если отчет имеет русскоязычный Report Alias, то IE 11 по умолчанию предлагает имя файла в виде кракозяблов. В Хроме все в порядке.
Проблема легко воспроизводится на Demo, проект "Using Viewer, Razor".
Надо задать для файла .mrt русскоязычный Report Alias и попробовать выбрать команду Save при просмотре отчета.
Мы такую проблему решали так:
При просмотре отчета есть возможность сохранить его прямо из Viewer'а во множество форматов, например PDF.
Если отчет имеет русскоязычный Report Alias, то IE 11 по умолчанию предлагает имя файла в виде кракозяблов. В Хроме все в порядке.
Проблема легко воспроизводится на Demo, проект "Using Viewer, Razor".
Надо задать для файла .mrt русскоязычный Report Alias и попробовать выбрать команду Save при просмотре отчета.
Мы такую проблему решали так:
Код: Выделить всё
/// <summary>
/// Установить Http-заголовок, с именем скачиваемого файла, с учётом обработки UTF-8 в разных браузерах
/// </summary>
/// <param name="httpContext">Http-контекст</param>
/// <param name="fileName">Имя файла, с которым браузер предложит пользователю сохранить файл</param>
public static void SetDownloadFileName(this HttpContextBase httpContext, string fileName)
{
if (httpContext == null || httpContext.Response == null)
{
return;
}
var browser = httpContext.Request != null && httpContext.Request.Browser != null ? httpContext.Request.Browser.Browser : null;
string headerValue;
switch (browser)
{
case "IE":
case "InternetExplorer":
headerValue = "attachment; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8);
break;
case "Firefox":
headerValue = "attachment; filename=" + fileName.Replace(" ", "+");
break;
default:
headerValue = "attachment; filename=" + fileName;
break;
}
headerValue += "; filename*=UTF-8''" + HttpUtility.UrlEncode(fileName, Encoding.UTF8);
httpContext.Response.AppendHeader("Content-Disposition", headerValue);
}
}