Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не понятки приработе с классом FileContentResult / 11 сообщений из 11, страница 1 из 1
24.09.2015, 16:05
    #39060487
Nikolay Kormushkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Реализовываю функционал сохранения файла из БД. В конечном счёте использую класс FileContentResult и задаю ему имя файла для автоматической подстановки в свойство FileDownloadName следующим образом:
Код: c#
1.
2.
3.
4.
5.
1            var file = _session.Instance.Load<SosResearchFile>(fileId);
2            string fn = String.IsNullOrEmpty(file.FileName) ? "ResearchFile" : file.FileName;
3            var res = new FileContentResult(file.GetDecodedFile(), "application/octet-stream");
4            res.FileDownloadName = fn;
5            return res;



При breakpoint-е на 3 ей строке имею полностью корректное имя файла, для примера создал такой файл - "абвгдеёжзиклмнопрстуфхцчшщъьэюя1234567890.txt".
Далее после работы этого кода в браузере появляется диалог сохранения файла и в нём я вижу имя файла отличающееся от того, что было задно свойству FileDownloadNameю. Вижу вот такое имя в итоге - "абвгдеёжзиклмнопрстуф%0d%0a хцчшщъьэюя1234567890.txt".
Т.е. после того как этот код отрабатывает на клиенте и появляется диалог сохранения файла в имя файла вставляются спец.символы "%0d%0a ". Это символы перевода строки и возврата каретки (\r\n). Причём для разных имён файлов наблюдаются разные позиции в имени файла с которых появляется эта вставка. Это явление появляется только на файлах с именем на кириллице. Использую FireFox 40.0.30. Попытался перекодировать в других кодировка, но не добился устранения проблемы. Подскажите, может кто-нибудь сталкивался с подобной проблемой?
...
Рейтинг: 0 / 0
25.09.2015, 06:38
    #39060805
Calabonga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Nikolay Kormushkin,


тынц

тынц
...
Рейтинг: 0 / 0
25.09.2015, 06:46
    #39060806
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Код: c#
1.
res.FileDownloadName = Uri.EscapeDataString(fn);
...
Рейтинг: 0 / 0
25.09.2015, 09:19
    #39060876
Nikolay Kormushkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Алексей К
Код: c#
1.
res.FileDownloadName = Uri.EscapeDataString(fn);



Такой код приводит к формированию файла с таким именем - "%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8C%D1%8D%D1%8E%D1%8F1234567890.txt"
...
Рейтинг: 0 / 0
25.09.2015, 09:26
    #39060883
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Nikolay Kormushkin,

сниффером смотрел заголовки ответа?
...
Рейтинг: 0 / 0
25.09.2015, 10:03
    #39060924
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Nikolay KormushkinАлексей К
Код: c#
1.
res.FileDownloadName = Uri.EscapeDataString(fn);



Такой код приводит к формированию файла с таким именем - "%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8C%D1%8D%D1%8E%D1%8F1234567890.txt""И это правильно" (ц) Михаил Сергеевич
...
Рейтинг: 0 / 0
25.09.2015, 17:07
    #39061501
Nikolay Kormushkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
CalabongaNikolay Kormushkin,


тынц

тынц

Попробовал задать таким образом, из примера:
Код: c#
1.
2.
3.
4.
5.
6.
7.
      <globalization
           fileEncoding="utf-8"
           requestEncoding="utf-8"
           responseEncoding="utf-8"
           culture="en-US"
           uiCulture="ru-RU"
        />



Поперебирал culture и uiCulture в ru-RU и en-US, но так и не добился устранения проблемы.
...
Рейтинг: 0 / 0
25.09.2015, 17:22
    #39061514
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Nikolay KormushkinАлексей К
Код: c#
1.
res.FileDownloadName = Uri.EscapeDataString(fn);



Такой код приводит к формированию файла с таким именем - "%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8C%D1%8D%D1%8E%D1%8F1234567890.txt"Это на сервере. На клиенте браузер ведь нормально имя файла раскодирует?
...
Рейтинг: 0 / 0
25.09.2015, 17:24
    #39061519
Nikolay Kormushkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Nikolay Kormushkin,

Мало того, в IE 11.0 имя файла становится таким - "ResearchFile?fileId=3ZwF9H%2BCJ0ioJhmA2uTOug" вместо ожидаемого "абвгдеёжзиклмнопрстуфхцчшщъьэюя1234567890.txt". Т.е. сформировалась строка c параметром запроса и ID файла в базе, но каким образом она там оказалась - вообще не понятно, такого экшена у меня нет в проекте.
...
Рейтинг: 0 / 0
25.09.2015, 17:31
    #39061525
Nikolay Kormushkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Алексей КNikolay Kormushkinпропущено...


Такой код приводит к формированию файла с таким именем - "%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8C%D1%8D%D1%8E%D1%8F1234567890.txt"Это на сервере. На клиенте браузер ведь нормально имя файла раскодирует?

Нет, я привёл конечное имя, которое я вижу уже на клиенте. Т.е. после предложенного вами кода, имя стало таким - "%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8C%D1%8D%D1%8E%D1%8F1234567890.txt" и после отправки на клиента оно никак не изменилось.
...
Рейтинг: 0 / 0
25.09.2015, 18:11
    #39061561
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понятки приработе с классом FileContentResult
Nikolay KormushkinАлексей Кпропущено...
Это на сервере. На клиенте браузер ведь нормально имя файла раскодирует?

Нет, я привёл конечное имя, которое я вижу уже на клиенте. Т.е. после предложенного вами кода, имя стало таким - "%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%91%D0%B6%D0%B7%D0%B8%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%BF%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%89%D1%8A%D1%8C%D1%8D%D1%8E%D1%8F1234567890.txt" и после отправки на клиента оно никак не изменилось.Странно, у меня было в точности как выше описано, помог этот способ. Правда у меня не через MVC, через Web API, но вот так работает с русскими буквами:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    public class FileApiResult : IHttpActionResult
    {
        public string FileName { get; set; }

        public Stream Content { get; set; }

        public string ContentType { get; set; }

        public long? ContentLength { get; set; }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            var result =
                new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StreamContent(Content)
                };

            result.Content.Headers.ContentDisposition =
                new ContentDispositionHeaderValue(DispositionTypeNames.Attachment)
                {
                    FileName = Uri.EscapeDataString(FileName)
                };

            result.Content.Headers.ContentType =
                new MediaTypeHeaderValue(ContentType ?? MediaTypeNames.Application.Octet);

            if (ContentLength.HasValue)
                result.Content.Headers.ContentLength = ContentLength;

            return Task.FromResult(result);
        }
    }


Может поможет чем.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не понятки приработе с классом FileContentResult / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]