Страница 1 из 1

Некорректное имя файла при сохранении в PDF из IE 11

Добавлено: 23 июл 2015, 08:50
DmitryRu
StiMvcViewer, версия 2015.1.11
При просмотре отчета есть возможность сохранить его прямо из 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);
        }
    }

Re: Некорректное имя файла при сохранении в PDF из IE 11

Добавлено: 23 июл 2015, 15:37
Vladimir
Здравствуйте Дмитрий,

Проблема решена, обновление будет доступно в следующем пререлиз билде.

Решено таким образом:

Код: Выделить всё

response.AddHeader("Content-Disposition", "attachment; filename=\"" + FileName + "\"; filename*=UTF-8''" + HttpUtility.UrlPathEncode(FileName.Replace('%', '_')));
Проверено под различными браузерами, проблем не обнаружено.

Спасибо.

Re: Некорректное имя файла при сохранении в PDF из IE 11

Добавлено: 17 мар 2017, 11:49
raaad
Здравствуйте, у меня проблема немного другая, но причина у нее та же, я использую Asp.Net MVC:

Невозможно экспортировать файлы отчетов, в названии которых встречаются спец. символы, например скобки ()[] и т.п.

HttpUtility.UrlPathEncode здесь не помогает, т.к. он не соот. rfc5987

P.S. Если нет возможности использовать штатные средства фреймворка, можно подсмотреть его реализацию ;)

Re: Некорректное имя файла при сохранении в PDF из IE 11

Добавлено: 20 мар 2017, 20:20
HighAley
Здравствуйте.

Скобки не являются запрещенными символами, при их наличии в имени отчета, файл сохраняется корректно.
Смотрите прилагаемый скриншот.
photo_2017-03-20_20-19-02.jpg
photo_2017-03-20_20-19-02.jpg (30.04 КБ) 4354 просмотра
С запрещёнными символами, такими как ?, *, / и другими действительно есть проблема, исправим к следующему пререлиз билду.

Спасибо.

Re: Некорректное имя файла при сохранении в PDF из IE 11

Добавлено: 21 мар 2017, 13:13
raaad
День добрый, да, вы правы, с MVC5 такой проблемы нет.

У нас она проявляется при использовании из WebApi, в котором заголовок Content-Disposition должен быть экранирован в соответствии с rfc5987, но т.к. это за рамками данной темы и мы нашли выход, больше вопросов не имею, спасибо.

Re: Некорректное имя файла при сохранении в PDF из IE 11

Добавлено: 22 мар 2017, 23:05
Aleksey
Здравствуйте,

Отлично!
Дайте знать, если будут еще вопросы.