asp.net mvc файл скачать имя кодировка - PullRequest
2 голосов
/ 03 ноября 2011

Мое приложение позволяет пользователям загружать файлы, но имена файлов могут быть в кириллической кодировке.Когда пользователь загружает файл, я хочу, чтобы имя было таким же, как пользователь видит, но в контроллере ContentDisposition не допускает имя в кириллической кодировке, и я пытаюсь преобразовать его в utf-8.Chrome, IE и Opera скачивают файл с правильным именем:enter image description here Firefox и сафари с чем-то вроде этого

enter image description here

мой контроллер:

 public ActionResult Download()
        {
            var name = Request.Params["Link"];
            var filename = Request.Params["Name"];


            filename = GetCleanedFileName(filename);

            var cd = new ContentDisposition
            {
                FileName = filename,
                Inline = false,
            };


            Response.AppendHeader("Content-Disposition", cd.ToString());
            return File(name, "application/file");
        }


        public static string GetCleanedFileName(string s)
        {
            char[] chars = s.ToCharArray();

            StringBuilder sb = new StringBuilder();

            for (int index = 0; index < chars.Length; index++)
            {
                string encodedString = EncodeChar(chars[index]);
                sb.Append(encodedString);
            }
            return sb.ToString();
        }

        private static string EncodeChar(char chr)
        {
            UTF8Encoding encoding = new UTF8Encoding();

            StringBuilder sb = new StringBuilder();

            byte[] bytes = encoding.GetBytes(chr.ToString());

            for (int index = 0; index < bytes.Length; index++)
            {
                if (chr > 127)
                    sb.AppendFormat("%{0}", Convert.ToString(bytes[index], 16));
                else
                    sb.AppendFormat("{0}", chr);

            }

            return sb.ToString();
        } 

1 Ответ

1 голос
/ 03 ноября 2011

Посмотрите здесь, мы использовали это в качестве примера, чтобы вернуть имя файла, которое мы хотели при загрузке файлов через контроллер.

http://www.simple -talk.com / DotNet / asp.net / asp.net-MVC-остросюжетные результаты, и-PDF-контента /

FileResult имеет свойство FileDownloadName, которое вы можете установить, используя его для установки имени файла при его отправке в ответ при загрузке пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...