下载ASP.Net MVC Web应用程序中的文件

时间:2010-05-06 16:52:45

标签: asp.net asp.net-mvc

我正在开发一个项目,该项目需要让用户从服务器上的静态位置下载pdf。我正在阅读this网站上的说明,这是一篇旧帖子,我注意到他们在更新中指出微软的MVC框架早已包含在内,而Action Result允许他们讨论相同的功能,从而使其过时,我看起来有点在线,但无法找到任何讨论这种内置功能的资源。如果有人有任何链接或其他信息讨论这一点,这将是非常有帮助的。感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用FileResult代替ActionResult在响应中返回文件流。例如,请在此处查看Can an ASP.Net MVC controller return an Image?问题。

答案 1 :(得分:1)

    public ActionResult Show(int id) {
        Attachment attachment = attachmentRepository.Get(id);

        return new DocumentResult { BinaryData = attachment.BinaryData,
                                    FileName = attachment.FileName };
    }

使用此自定义类,可能类似于FileResult:

 public class DocumentResult : ActionResult {

    public DocumentResult() { }

    public byte[] BinaryData { get; set; }
    public string FileName { get; set; }
    public string FileContentType { get; set; }

    public override void ExecuteResult(ControllerContext context) {
        WriteFile(BinaryData, FileName, FileContentType);
    }

    /// <summary>
    /// Setting the content type is necessary even if it is NULL.  Otherwise, the browser treats the file
    /// as an HTML document.
    /// </summary>
    /// <param name="content"></param>
    /// <param name="filename"></param>
    /// <param name="fileContentType"></param>
    private static void WriteFile(byte[] content, string filename, string fileContentType) {
        HttpContext context = HttpContext.Current;
        context.Response.Clear();
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.ContentType = fileContentType;
        context.Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + "\"");

        context.Response.OutputStream.Write(content, 0, content.Length);

        context.Response.End();
    }
}

答案 2 :(得分:0)

返回FileResult