Код: Выделить всё
public ActionResult CSV(int id)
{
var model = GetRaportData(id); // Gets the data that will be exported
var cd = new System.Net.Mime.ContentDisposition
{
FileName = model.Raport.Name + ".csv",
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
// The contents of the CSV file are rendered via a view
var csv = ViewToString.RenderRazorViewToString(ControllerContext, "_CSV", model);
// To make the CSV file compatible with encoding in Excel
// the file is reencoded in Ansi 1250
return File(csv.ToAnsi1250(), "text/plain");
}
Код: Выделить всё
var cd = new System.Net.Mime.ContentDisposition
{
FileName = model.Raport.Name + ".csv",
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
Например:
Ę У этого файла очень длинное имя Lorem Ipsum Lorem Ipsum.csv
становится
Ę У этого файла очень длинное имя Lorem Ip%0d%0a sum Lorem Ipsum.csv
Похоже, не имеет значения, где находится символ UTF-8, какой это символ или сколько их. там.
Если в имени нет символов UTF-8 или имя относительно короткое, «%0d%0a» не появится в имени сохраненного файла.
Кто-нибудь знает, почему это происходит и\или как это исправить?
Изменить: если я назову свой файл:
ABУ этого файла очень длинное имя Lorem Ipsum Lorem Ipsum.csv
Проблемы не возникнет.
Я мог бы удалить символы UTF-8, заменив их базовыми латинскими символами, но я скорее попробую исправить проблему, чем использовать обходной путь.
Как предложил Рикардо Момм, я протестировал проблему в другом браузере (описание выше описывает, как это выглядело в FireFox). В Chrome файлы, в имя которых в FireFox будет добавлено "%0d%0a", просто переименовываются в "16" без расширения.
Изменить: "16" взято из URL-адреса, ведущего к файлу (что-то вроде http://someaddress/CSV/16), поэтому кажется, что Chrome полностью игнорировал это имя.
Подробнее здесь: https://stackoverflow.com/questions/218 ... it-contain
Мобильная версия