将生成的文件流式传输到浏览器而无需写入文件系统

时间:2014-01-31 03:02:37

标签: asp.net-mvc

我知道我可以使用以下代码从控制器操作返回文件:

public ActionResult SomeAction()
{
    return File(PathToTheFile);
}

还有一个重载接受Stream而不是文件路径。

就我而言,我基于数据库查询动态创建CSV文件。将CSV文件直接写入响应并将响应视为文件会更简单。有可能吗?怎么样?

编辑

我假设我会写某种流,但是什么样的流和谁负责处​​理它?<​​/ p>

1 个答案:

答案 0 :(得分:2)

修改

当您动态创建输出并且希望避免创建文件和内存流以提高性能并避免额外的I / O时,一个简单的解决方案是直接写入Http Response。以下代码是一个适合我的示例。您可以对数据使用相同的方法。

public ActionResult getFile()
    {
        Response.AddHeader("Content-Disposition", "attachment; filename=myVFile.csv");
        Response.ContentType = "text/csv";


        //sample data 
        string[] data = { "-4", "-3", "-2", "-1", "0", "1", "2", "3" };


        //Query data with LINQ  - This can be done in diffrent ways 
        (from item in data
         where
            //Some conditions
            item != "-4"
         select
         //Select whatever you want to be in the output 
         item
         )
        .ToList()
        .ForEach(
              //Write items from your LINQ Query to HTTP Response 
               item => Response.Write(item + ",")
        );

        //You can use a foreach loop instead of chaining ForEach in LINQ as above 


        Response.End();

        return Content(null);
    }