gpt4 book ai didi

c# - CSV 文件被保存为 XLS 或没有下载

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:58 28 4
gpt4 key购买 nike

我正在尝试让用户下载一个 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 除外,这使得它在新网页中以纯文本形式打开)。

我做错了什么?

最佳答案

稍微澄清一下这个问题:您有一个名为 /CSV/Stats/SomeFileName.csv 的文件,您想要将该内容提供给用户,对吗?但是我看不到你从文件中读取字节的位置,以便提供内容——你正在提供一个文件,这是不对的,除非你要提供一个重定向到 /CSV/Stats/SomeFileName.csv 如果您不提供重定向服务,则需要执行以下操作:

var s = File.ReadAllText(path);
return File(Encoding.Unicode.GetBytes(s.ToString()), "text/csv", file + ".csv");

最后:使用 file 作为参数名称可能是一件坏事,因为它至少会产生误导,最坏的情况是会引起混淆。

关于c# - CSV 文件被保存为 XLS 或没有下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30876661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com