我正在尝试允许用户下载csv文件,然后使用Excel打开它(最好选择“使用Excel打开文件'”选项)。
//Cont.cs
public ActionResult CSVLink(string file)
{
var dir = Server.MapPath("/CSV/Stats");
var path = Path.Combine(dir, file + ".csv"); // I have tried this both with and w/o adding the csv here, and on the anchor's href instead
return File(path, "application/csv");
}
//Links.cshtml
<a target="_blank" href="/CSVLink?file=Hits_20150616">Today's Hits</a>
这主要起作用,因为它允许用户下载文件,但文件扩展名不保留为csv。问题似乎与return File(path, "application/csv");
有关,更具体地说是application/csv
。
这里列出了各种mime类型的内容:
application/csv
- 文件已下载,但没有文件扩展名text/csv
- 同样application/binary
- 同样application/vnd.ms-excel
- 文件下载为.xls文件,这会弄乱它在Excel中的外观。这是另一个奇怪的事情:所有不具有扩展名的文件,如果我重命名它们并将.csv放在最后,它们在Excel中打开看起来很完美。在IE和Firefox中都会发生这种情况(octet-stream
除外,这使得它在新网页中以纯文本形式打开)。
我做错了什么?
答案 0 :(得分:0)
要澄清一个问题:您有一个名为/CSV/Stats/SomeFileName.csv
的文件,并且您希望将该内容提供给用户,对吗?但我没有看到你从文件中读取字节的位置,以便提供内容 - 你正在提供一个文件,这是不对的,除非你要提供重定向到{{ 1}}如果您没有提供重定向,则需要执行以下操作:
/CSV/Stats/SomeFileName.csv
最后:使用var s = File.ReadAllText(path);
return File(Encoding.Unicode.GetBytes(s.ToString()), "text/csv", file + ".csv");
作为您的参数名称可能是一件坏事 - 在那里 - 它至少会产生误导,最坏的情况会引起混淆。