允许用户下载文件 – ASP.NET

我有一个创建音频文件的应用程序。 当需要用户保存文件时,我需要提供一个链接来调出保存对话框。

我将下载按钮设置为链接按钮。 从我的研究看来,为了能够强制启动保存对话框,我需要添加以下代码:

Response.ContentType = "audio/wav"; Response.AppendHeader("Content-Disposition", "attachment; filename=blah.wav"); Response.WriteFile(@"blah.wav"); Response.End(); 

当我将它添加到链接按钮的事件处理程序时,我收到错误:

 "Line: 4723 Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled. Details: Error parsing near 'RIFF?WAVEfmt '." 

所以,我决定通过创建一个便于下载的中间页面来尝试它。 在下载linkbutton事件处理程序中,我向此中间页面添加了Respose.Redirect ,并在页面的Page_Load上添加了上面的代码片段。 当以这种方式设置时,IE会通过以下方式阻止下载:

"To help protect your security, Internet Explorer blocked his site from downloading files to your computer. Click here for options"当我单击并选择“下载文件”时,我没有收到“保存”对话框。

我的问题:1。我可以删除中间页吗? 2.如果我不能怎么没有IE提示用户采取行动?

也许你的Response在命中代码之前包含了一些内容,你在输出任何东西之前尝试过Response.Clear()吗?

此外, Response.End()之后不应该有任何Response.Write

这将修复第一个错误,并将消除对中间页面的需要。

我之前已经这样做了所以我没有看到限制。

尝试找出正在修改Response

谢谢

 Response.Clear(); Response.ContentType = "audio/x-wav"; Response.AddHeader("Content-Disposition", "attachment;filename=blah.wav"); Response.WriteFile(@"blah.wav"); Response.Flush(); Response.End(); 

我相信你错过了两个部分,Clear()和Flush()。

我以前用过这个确切的代码。

作为注释,您可能需要使用Response.BinaryWrite而不是Response.WriteFile。

 protected void Button1_Click(object sender, EventArgs e) { String FileName1 = "test.mp3"; String FilePath1 = "~/audio/test.mp3"; String FileName = "FileName1"; String FilePath = FilePath1; System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.ClearContent(); response.Clear(); response.ContentType = "text/plain"; response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); response.TransmitFile(FilePath); response.Flush(); response.End(); }  

只是猜测,但您的问题可能是由于服务器上未设置某些MIME类型。