ASP.NET Downloading file through client javascript

2019-07-25 18:18发布

I am not very skilled in ASP.NET and I have tried to:

  1. Update UI elements on an aspx site
  2. at the same time download a file

I have this JS function:

function downloadURL(url) {
            var hiddenIFrameID = 'hiddenDownloader',
                iframe = document.getElementById(hiddenIFrameID);
            if (iframe === null) {
                iframe = document.createElement('iframe');
                iframe.id = hiddenIFrameID;
                iframe.style.display = 'none';
                document.body.appendChild(iframe);
            }
            iframe.src = url;
        };

and this Button server control:

<asp:Button runat="server" ID="Button1" Content="DOWNLOAD" OnClick="Button1_Click" />

in the EventHandler I simply call:

// UPDATE UI

textBoxXY.Text = "Text after file download";

ClientScript.RegisterStartupScript(typeof(MyPage), "myDownloadKey", "downloadURL(" + ResolveUrl("~/MyDownloadHandler.ashx") + ");", true);

What do you think of this approach. It seems to work but...

1条回答
唯我独甜
2楼-- · 2019-07-25 18:47

All have to do with the MyDownloadHandler.ashx headers. If you add there this headers on your handler ashx

 HttpContext.Current.Response.ContentType = "application/octet-stream";
 HttpContext.Current.Response.AddHeader("Content-Disposition", 
                    "attachment; filename=" + SaveAsThisFileName);

then the browser will open the file save browser and not a new tab.

And you only have to do with javascript is

window.location = "MyDownloadHandler.ashx";

or just a simple link.

So to summarize, you have create a lot of code that is not necessary, and you make and a post back, that is also not necessary.

Relative: What is the best way to download file from server
Error handling when downloading file from ASP.NET Web Handler (.ashx)

查看更多
登录 后发表回答