Response.TransmitFile在MVC 5中不起作用

时间:2018-09-28 04:38:38

标签: c# asp.net-mvc-5

我有一个mvc 5应用程序,我将字母文件保存在(〜\ Files \ Letters)等文件夹内的文件夹中,并将物理路径保存在数据库中,将字母文件上传到(〜\ Files \ Letters)可以正常工作并保存物理路径工作正常,问题是将信函文件下载到客户端计算机,我尝试使用Webclient和Response都行不通并且没有给出任何错误,这是使用Response下载信函文件的代码。 / p>

 [HttpPost]
    public void open(int id)
    {

        string path = "";

        path = db.tblLetters.Where(t => t.ID == id).SingleOrDefault().LetterImg;
        string fileName = path.Substring(path.LastIndexOf(@"\")+1);
        string p = Server.MapPath("~/Files/LettersImgs/" + fileName);

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
        Response.ContentType = "application/octet-stream";
        Response.TransmitFile(p);
        Response.End();

    }

1 个答案:

答案 0 :(得分:0)

您可以使用FilePathResult直接从服务器的文件路径返回文件,而不必使用旧式的Response.TransmitFile。将返回类型从void更改为ActionResult(或FileResult),并使用[HttpGet]代替[HttpPost],然后执行return File(...)让用户下载像下面的示例一样的文件:

[HttpGet]
public ActionResult Open(int id)
{
    string path = "";

    path = db.tblLetters.Where(t => t.ID == id).SingleOrDefault().LetterImg;
    string fileName = path.Substring(path.LastIndexOf(@"\")+1);
    string p = Server.MapPath("~/Files/LettersImgs/" + fileName);

    return File(p, "application/octet-stream", fileName);
}

相关问题:How to download a file to client from server?