从FileResult下载文件而不保存到磁盘
我正在使用MVC 4。
我的控制器中有一个方法可以按需生成CSV文件,我希望用户可以下载该文件,而无需将其保存到服务器端的磁盘上。 所以我在File()对象上传递一个MemoryStream,以避免首先将文件保存到磁盘,然后给他下载路径。
控制器方法:
[HttpGet] public ActionResult GenerateCsv(string data) var sb = new StringBuilder(); sb = GetCsvReportToString(data); var stream = new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())); return this.File(stream, "text/csv", "ReportCsv.csv"); }
sb(StringBuilder)具有正确的数据,因为我已经调试并确认了它。
我的javascript代码:
window.open(generateFileLink + '?data=' + dataToSend, '_blank');
该窗口实际上已打开,下载对话框出现但出现错误,表示无法从localhost下载:
名称在下载“ReportToCsv”中有所不同,因为我在问题中没有使用真实姓名,但无关紧要。
有人可以帮忙吗?
试试这个
var sb = new StringBuilder(); sb=GetCsvReportToString(data); return File(Encoding.UTF8.GetBytes(sb.ToString()), System.Net.Mime.MediaTypeNames.Application.Octet, "ReportCsv.csv");
这个问题的答案可以在这里找到: https : //stackoverflow.com/a/11267754/1417487
对于IE版本6-8,它是关于缓存的标题。