Мое приложение позволяет пользователям загружать файлы, но имена файлов могут быть в кириллической кодировке.Когда пользователь загружает файл, я хочу, чтобы имя было таким же, как пользователь видит, но в контроллере ContentDisposition не допускает имя в кириллической кодировке, и я пытаюсь преобразовать его в utf-8.Chrome, IE и Opera скачивают файл с правильным именем: Firefox и сафари с чем-то вроде этого
мой контроллер:
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();
}