C# Response.TransmitFile在mvc 5中不起作用
我有一个mvc 5应用程序,我将信件文件保存在文件夹中的文件夹中,如(~\files\letters),我将物理路径保存在数据库中,将信件文件上载到(~\files\letters)工作正常,保存物理路径工作正常,问题是将信件文件下载到客户端机器,我试过使用Webclient和Response都不起作用,也没有给出任何错误,下面是使用Response下载信件文件的代码C# Response.TransmitFile在mvc 5中不起作用,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我有一个mvc 5应用程序,我将信件文件保存在文件夹中的文件夹中,如(~\files\letters),我将物理路径保存在数据库中,将信件文件上载到(~\files\letters)工作正常,保存物理路径工作正常,问题是将信件文件下载到客户端机器,我试过使用Webclient和Response都不起作用,也没有给出任何错误,下面是使用Response下载信件文件的代码 [HttpPost] public void open(int id) { string 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();
}
您可以使用直接从服务器的文件路径返回文件,而不是使用旧式的
Response.TransmitFile
。将返回类型从void
更改为ActionResult
(或FileResult
),并使用[HttpGet]
而不是[HttpPost]
,然后执行返回文件(…)
,让用户下载该文件,如以下示例所示:
[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);
}
相关问题:public void open(int-id)
=>这应该是public ActionResult open(int-id)
并使用返回文件(p,“应用程序/八位字节流”,文件名)
返回文件(注意:必须使用HttpGet
来启用下载)。