我正在尝试在控制器操作中生成Excel .xlsx文件。我想让网站显示下载提示,以下载生成的文件。控制器操作执行正常,但不显示下载提示。没有任何事情发生。
我试过了:
MemoryStream mstream = ... //generated file;
return File(mstream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", model.DisplayName + ".xlsx");
我试过了:
return new FileStreamResult(mstream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = model.DisplayName + ".xlsx" };
我试过了:
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + model.DisplayName + ".xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.Write(mstream.ToArray());
Response.End();
return Content("");
我甚至尝试将文件保存到磁盘,然后通过文件路径返回
return File(filepath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
我做错了什么? 谢谢!
答案 0 :(得分:1)
我在MVC项目中使用以下代码。
public ActionResult GetCSV()
{
string filename = "example";
string csv = MyHelper.GetCSVString();
return File(Encoding.UTF8.GetBytes(csv.ToString()), "text/csv", string.Format("{0}.csv", filename));
}
我的csv字符串可能看起来像这样
"Col1,Col2,Col3\nRow1Val1,Row1Val2,Row1Val3\n"
要在新窗口中触发此下载,请调用以下JavaScript
window.open('/MyUrl/GetCSV', 'DownloadWindowName');
答案 1 :(得分:0)
按如下方式添加标题。
var cd = new System.Net.Mime.ContentDisposition
{
FileName = model.DisplayName + ".xlsx",
Inline = false
};
Response.AppendHeader("Content-Disposition", cd.ToString());
然后按如下方式返回文件
return File(mstream, ".xlsx");
关于下载提示。如果您指的是询问文件保存位置的提示,则取决于用户在浏览器设置中的设置方式。例如,在chrome中,用户可以选择在下载文件时不获取提示并将其下载到预先指定的位置(如下载文件夹)。 http://malektips.com/google-chrome-prompt-download-file.html#.VM-DbFWsUm8