FileContentResult操作产生不完整的文件

时间:2014-11-22 00:48:25

标签: c# asp.net-mvc download

我一整天都在努力研究这个问题。手指交叉,这里有人可以帮助我。 :)

前言:我对ASP非常非常新,所以我提前为我的无知道歉。

目标:我希望能够通过下载按钮向用户返回各种格式的生成报告。报告生成正常,我已经将它们以字符串格式准备好,以便在某处填充文件。

我们正在为我们的页面使用razor MVC,因此我有一个ActionLink供下载,如下所示:

@Html.ActionLink("CSV", "export", (controller), new {
                        format = "text/csv",
                        #SNIP VARIOUS USER PARAMETERS#
                    }, null)

这张贴到我们的控制器:

[ActionName("export")]
[HttpGet]
public System.Web.Mvc.ActionResult ExportClubs(string format, #PARAMETERS#)
    {
        string fileName = "export" + ".csv";

        #GENERATE REPORT DATA#

        string content = #REPORT DATA#
        // Tried a few different encodings here.
        byte[] bytes = Encoding.UTF8.GetBytes(content);

        // many different header configurations tried here too; this is where the examples
        // tend to vary the most.
        HttpContext.Current.Response.AddHeader("content-disposition",
                "attachment; filename=" + fileName);
        HttpContext.Current.Response.ContentType = format;

        // Tried many different encodings here as well, including text/csv
        System.Web.Mvc.FileContentResult file = new System.Web.Mvc.FileContentResult(bytes, System.Net.Mime.MediaTypeNames.Text.Plain);
        file.FileDownloadName = fileName;
        return file;
    }

所以,点击一下,该文件就会出现正确的名称和所有内容!除了内容如下:

{"FileContents":"RGlzd...#SNIP VERY LONG STRING#","ContentType":"text/plain","FileDownloadName":"export.csv"}

似乎最后一步是错过了某个地方,取出了FileContents并重新组装了一个文件,但我不能为我的生活弄明白。绝对没有我见过的例子解决这个问题,所以我觉得我必须在某个地方错过一些愚蠢的事情。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您的内容类型错误,您实例化文件内容结果类时代码的最后部分应如下所示:

// Tried many different encodings here as well, including text/csv
System.Web.Mvc.FileContentResult file = new System.Web.Mvc.FileContentResult(bytes, "text/csv"); // or what you recieve from arguments
file.FileDownloadName = fileName;
return file;

希望有所帮助!