25

What is the best way to implement, from a web page a download action using asp.net 2.0?

Log files for a action are created in a directory called [Application Root]/Logs. I have the full path and want to provide a button, that when clicked will download the log file from the IIS server to the users local pc.

1
  • Would you use Response.TransmitFile( for a small file as well? Commented Sep 18, 2008 at 13:08

2 Answers 2

39

Does this help:

http://www.west-wind.com/weblog/posts/76293.aspx

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition","attachment; filename=logfile.txt");
Response.TransmitFile( Server.MapPath("~/logfile.txt") );
Response.End();

Response.TransmitFile is the accepted way of sending large files, instead of Response.WriteFile.

Sign up to request clarification or add additional context in comments.

2 Comments

A KEY part of this is the Response.End() - without it you will end up with occasionally corrupt downloads, broken digital signatures, all sorts of weirdness.
Can this be used or modified to grab a remote file from another URL ?
12

http://forums.asp.net/p/1481083/3457332.aspx

string filename = @"Specify the file path in the server over here....";
FileInfo fileInfo = new FileInfo(filename);

if (fileInfo.Exists)
{
   Response.Clear();
   Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
   Response.AddHeader("Content-Length", fileInfo.Length.ToString());
   Response.ContentType = "application/octet-stream";
   Response.Flush();
   Response.TransmitFile(fileInfo.FullName);
   Response.End();
}


Update:

The initial code

Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name);

has "inline;attachment" i.e. two values for Content Disposition.

Don't know when exactly it started, but in Firefox only the proper file name was not appearing. The file download box appears with the name of the webpage and its extension (pagename.aspx). After download, if you rename it back to the actual name; file opens successfully.

As per this page, it operates on First Come First Served basis. Changing the value to attachment only solved the issue.

PS: I am not sure if this is the best practice but the issue is resolved.

2 Comments

-1: As Martin said, use TransmitFile instead of WriteFile. WriteFile is essentially broken for large files
I'm doing just this with a button inside of a ModalPopupExtender operating an update panel and it won't work. However, if I move the button outside of the modalpopup/updatepanel area it works flawlessly? Any ideas how to get around this?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.