c# - asp.net mvc文件下载名称编码

标签 c# asp.net-mvc encoding

我的应用程序允许用户下载文件,但文件名可以采用西里尔编码。 当用户下载文件时,我希望名称与用户看到的一样,但在 Controller ContentDisposition 中不允许使用西里尔编码的名称,我尝试将其转换为 utf-8。 Chrome、IE 和 Opera 下载具有正确名称的文件:

enter image description here firefox 和 safari 这样的东西


enter image description here

我的 Controller :

 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();
        } 

最佳答案

看这里,我们以此为例,返回我们希望通过 Controller 下载文件时的文件名。

http://www.simple-talk.com/dotnet/asp.net/asp.net-mvc-action-results-and-pdf-content/

FileResult 有一个 FileDownloadName 属性,您可以设置它用于设置文件名,因为它会在用户下载时发送到 Response。

关于c# - asp.net mvc文件下载名称编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999095/

相关文章:

c# - 忽略数据集中不存在的列(绑定(bind)字段)

带整数的 C# 按位运算符

asp.net-mvc - 字符串 <br/> 到 HTML

c# - 发送 http header 后服务器无法设置状态

python - 异常消息的默认编码

c# - 如何使用自定义命名空间创建 SyndicationFeed

c# - ExecuteNonQuery 返回 1,即使更新语句没有影响任何行

asp.net-mvc - 如何在 ASP.NET MVC 中的 ActionLink 末尾添加斜线?

c++ - 跨平台mySQL与字符集不一致

PHP 电子邮件编码?