I'm facing a very strange problem in my ASP.NET Application.
When the user clicks the button that downloads a file, Internet Explorer / Chrome / Firefox shows the save dialog but the name of the file is the name of the ASPX Page (For example, if the page is named Download.aspx the download dialog shows the "file" Download.zip). Sometimes, when playing with MIME type the download dialog shows "Download.aspx". Seems that you're trying to download the page, but actually is the correct file.
This happens with ZIP extension and here is my code (pretty standard I think):
this.Response.Clear();
this.Response.ClearHeaders();
this.Response.ClearContent();
this.Response.AddHeader("Content–Disposition", "attachment; filename=" + file.Name);
this.Response.AddHeader("Content-Length", file.Length.ToString());
this.Response.ContentType = GETCONTENTYPE(System.IO.Path.GetExtension(file.Name));
this.Response.TransmitFile(file.FullName);
this.Response.End();
The GetContentType function just returns the MIME for the file. I tried with application/x-zip-compressed, multipart/x-zip and of course application/zip. With application/zip Internet Explorer 8 shows XML error.
Any help with be very appreciated.
Greetings,
I think something like
Response.Redirect(ResolveUrl(file.FullName))
instead ofResponse.TransmitFile(file.FullName)
is what you intended. It sounds like you actually want their browser to point at the file, not just transmit the file as a response to the current the request.Edit: Also see this SO question How to retrieve and download server files (File.Exists and URL)
Update: Based on your feedback, i think this is what you're looking for.
For Excel export
It worked for me with IE and Firefox.
I'm looking at what I've done to handle a similar mechanism, and here's the steps I'm doing (bold item seemingly the only real difference):
Although this.Response and HttpContext.Current.Response should be the same, it may not be for some reason.