强制下载ASP.Net

在ASP.Net(使用C#)中,我正在尝试使用纯文本创建一个.DAT文件并将其发送到浏览器并强制下载。 我尝试了几件事,但我无法让它发挥作用。 在我的aspx文件中有一个ImageButton

  

在OnClick方法中,我正在尝试创建该文件并将其发送到浏览器。

 protected void btnSave_OnClick(object sender, EventArgs e) { string file = "test.dat"; string fileName = "~\\Stages\\Broekx\\Databanken\\" + file; FileStream fs = new FileStream(MapPath(fileName), FileMode.Open); long cntBytes = new FileInfo(MapPath(fileName)).Length; byte[] byteArray = new byte[Convert.ToInt32(cntBytes)]; fs.Read(byteArray, 0, Convert.ToInt32(cntBytes)); fs.Close(); ImageButton btnSave = (ImageButton)FormViewStagesDummy.FindControl("btnSave"); btnSave.Visible = false; File.Delete(Server.MapPath(fileName)); if (byteArray != null) { this.Response.Clear(); this.Response.ContentType = "text/plain"; this.Response.AddHeader("content-disposition", "attachment;filename=" + file); this.Response.BinaryWrite(byteArray); this.Response.End(); this.Response.Flush(); this.Response.Close(); } } 

文件test.dat存在于正确的文件夹中,在读入字节后必须删除。 我试过这个没有删除文件,也不会工作。

单击btnSave后,必须隐藏按钮,这就是我将参数Visible设置为false的原因。

我也尝试了内容类型“application / octet-stream”或PDF文件和内容类型“application / pdf”,但没有任何效果。 页面正常加载,没有下载文件。

文件字符串的路径实际上是否正确?

 this.Response.AddHeader("content-disposition", "attachment;filename=" + file); 

它不应该是文件名吗?

为什么要在将文件写入响应之前删除该文件? 通过响应提供文件然后将其删除会更有意义吗?

即打电话

 File.Delete(Server.MapPath(fileName)); 

在回复之后。

你应该试试:

 Response.TransmitFile( Server.MapPath(fileName) ); Response.End(); 

TransmitFile非常高效,因为它基本上将文件流卸载到IIS,包括可能导致文件缓存在Kernal缓存中(基于IIS的缓存规则)。 到Response.End();

  Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "text/plain"; Response.AppendHeader("Content-Disposition", "attachment; filename = " + fileName); Response.TransmitFile(Server.MapPath("~/foldername/" + fileName)); Response.End();