MVC3 - 如何输出要下载的文件而不先将其保存在服务器上?

时间:2011-08-17 05:01:05

标签: asp.net-mvc-3

在PHP中,可以通过使用正确的标头回显文件到浏览器。您无需先在服务器上保存它的副本。

假设我有一堆数据我希望作为excel文件返回 - 在使用OpenXML创建数据结构后,如何在不将其保存在服务器上的情况下将文件提供给用户?

3 个答案:

答案 0 :(得分:11)

实际上这很简单。在您的控制器中,您可以执行以下操作:

    public ActionResult GetMyFile()
    { 
        //dynamically generate a file
        System.IO.MemoryStream ms;
        ms = GenerateFile(); // Some function to return a memorystream object

        // return the file
        return File(ms.ToArray(), "filename.pdf");
    }

将向用户显示一个对话框,询问他们是否要打开文件或保存文件。

答案 1 :(得分:9)

通过设置FileStreamContentTypeFileDownloadName属性,将您的数据写入流并通过FileStreamResult中的控制器操作方法返回。

    [HttpGet]
    public FileStreamResult MyFile()
    {
        var fileStreamResult = new FileStreamResult (GetMyContentAsStream(), "my/content-type-here");
        fileStreamResult.FileDownloadName = "my-file-download-name.here";

        return fileStreamResult ;
    }

<强>更新 这样做的捷径是使用Controller.File()方法。

    [HttpGet]
    public FileStreamResult MyFile()
    {
        return File(GetMyContentAsStream(), "my/content-type-here");
    }

答案 2 :(得分:2)

您可以将动态生成的文件的内容保存在MemoryStream对象中。返回文件时,可以使用MemoryStream的GetBuffer()方法将字节数组作为第一个参数传递。然后设置ContentTypeFileDownloadName参数。

此致