强制提示下载IE框

时间:2011-02-25 14:21:45

标签: .net asp.net internet-explorer download

我在应用程序中的某些报告出现问题我正在进行管理

我有一个按钮,它会回发到服务器并执行一些信息,然后回到客户端并打开一个弹出窗口来下载报告。

    private void grid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
 ...
 ClientScript.RegisterClientScriptBlock(this.GetType(), "xxx", "<script>javascript:window.location('xx.aspx?m=x','xxx','width=750,height=350,directories=no,location=no,menubar=no,scrollbars,status=no,toolbar=no,resizable=yes,left=50,top=50');</script>");
}

然后在xxx.aspx中我有代码:

 Response.ClearContent();
 Response.ClearHeaders();
 Response.TransmitFile(tempFileName);
 Response.Flush();
 Response.Close();

 File.Delete(tempFileName);

 Response.End();

如果启用了IE选项自动提示文件下载,则此工作正常。但默认情况下这是禁用的,我需要强制下载框提示。

如果不更改大量代码,我可以做任何事情吗?

感谢。

5 个答案:

答案 0 :(得分:2)

这是Internet Explorer的设计。该开关告诉IE不显示该对话框,除非用户右键单击并从菜单中选择“下载”。

你无能为力。

Source:

  

自动下载阻止会自动禁止用户未启动的文件下载对话框(例如单击鼠标或按键)。当对话框被阻止时,信息栏将显示在窗口的顶部。用户可以通过单击信息栏下载被阻止的内容。

答案 1 :(得分:1)

有一个标题会导致显示下载框。尝试添加Content-Disposition标头以触发它:

内容 - 处置:附件;文件名= fname.ext

答案 2 :(得分:1)

我过去做过这个,似乎有效。我猜你正在尝试传输硬盘上存在的文件...

版本1 在您的Page_Load事件处理程序中。添加此...(示例在VB中)

'Prepare page for a file download 
Response.ContentType = "application/x-msdownload"
Response.AddHeader("content-disposition", "attachment; filename=thefilename.ext")
Response.WriteFile(pathToFile)

此代码用于将Excel文件返回给用户。

第2版(旧项目代码)
在服务器上的按钮单击事件中

    Dim Results As New DataSet()
    Results.DataSetName = "SearchExport"

    Dim SearchTable As DataTable     
    Dim sFileName As String = "SearchExport.xls"

    Response.ContentType = "application/x-msexcel"
    Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", sFileName))
    SearchTable = GetTheSearchResults()
    SearchTable.TableName = "SearchResults"
    Results.Tables.Add(SearchTable)

   ' This example takes the xml and converts it to HTML using XSLT, replace this with  your string of data that should be returned. Or put Response.WriteFile() instead.
    Response.Write(ConvertToString(Results.GetXml))
    Response.End()

这个答案的第2版是来自另一个项目的复制/粘贴,它不直接做你想要的,但你应该能够填补空白。 (即删除临时文件等)

答案 3 :(得分:0)

尝试使用

window.open代替window.location

希望这有帮助

答案 4 :(得分:0)

设置适当的标题并使用 BinaryWrite 方法将有效...

string filePath = "the path to your file";

byte[] fileData = MethodToReadBinaryContentsOfFile(filePath);

Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = null;
Response.AddHeader("Content-Disposition", "attachment;filename=the name to save the file as");
Response.ContentType = "binary/octet";
Response.BinaryWrite(fileData);

System.IO.File.Delete(filePath);

Response.End();