Downloading Files Using Asp - Net C#
Downloading Files Using Asp - Net C#
N.B: If you want to bypass the Open/Save/Cancel dialog you just need to replace LINE1 by the below
code
Response.TransmitFile VS Response.WriteFile:
1- TransmitFile: This method sends the file to the client without loading it to theApplication memory
on the server. It is the ideal way to use it if the file size being download is large.
2- WriteFile: This method loads the file being download to the server's memory before sending it to
the client. If the file size is large, you might the ASPNET worker process might get restarted.
The following code can be used for downloading files in our application.The Original
path of the file will be hidden using this code.
private void btnDownload_Click(object sender, System.EventArgs e)
{
// The file path to download.
string filepath = @"C:\shadow_copy.rar";
// The file name used to save the file to the client's system..
string filename = Path.GetFileName( filepath );
System.IO.Stream stream = null;
try
{
// Open the file into a stream.
stream = new FileStream( filepath,
System.IO.FileMode.Open,System.IO.FileAccess.Read, System.IO.FileShare.Read );
// Total bytes to read:
long bytesToRead = stream.Length;
Response.ContentType = "application/octet-stream";
Response.AddHeader( "Content-Disposition", "attachment; filename=" + filename );
// Read the bytes from the stream in small portions.
while ( bytesToRead > 0 )
{
// Make sure the client is still connected.
if ( Response.IsClientConnected )
{
// Read the data into the buffer and write into the
// output stream.
byte[] buffer = new Byte[10000];
int length = stream.Read( buffer, 0, 10000 );
Response.OutputStream.Write(buffer, 0, length);
Response.Flush();
// We have already read some bytes.. need to read
// only the remaining.
bytesToRead = bytesToRead - length;
}
else
{
// Get out of the loop, if user is not connected anymore..
bytesToRead = -1;
}
}
}
catch(Exception ex)
{
Response.Write(ex.Message);
// An error occurred..
}
finally
{
if ( stream != null ) {
stream.Close();
}
}
}