从FileResult下载文件而不保存到磁盘

时间:2014-05-09 14:01:55

标签: c# asp.net-mvc download

我正在使用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下载:

enter image description here

下载“ReportToCsv”中的名称不同,因为我在问题中没有使用真实姓名,但无关紧要。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

试试这个

var sb = new StringBuilder();
            sb=GetCsvReportToString(data);
            return File(Encoding.UTF8.GetBytes(sb.ToString()), System.Net.Mime.MediaTypeNames.Application.Octet, "ReportCsv.csv");

答案 1 :(得分:0)

这个问题的答案可以在这里找到:https://stackoverflow.com/a/11267754/1417487

对于IE版本6-8,它是关于缓存的标题。