Option 1 - Pass in the raw byte array
public void DownloadFile(byte[] data, string FileType = "application/csv", string FileName = "data.csv")
{
// headers
Response.BufferOutput = true;
Response.ClearHeaders();
// explicitly append preamble for csv files so excel recognizes utf-8 encoding
if (FileType.ContainsValue("csv"))
{
Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
}
// encoding
Response.ContentEncoding = System.Text.Encoding.UTF8;
// content type
Response.ContentType = FileType;
// content disposition
Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", FileName));
// data
Response.BinaryWrite(data);
// end
Response.End();
}
Option 2 - Pass in a simple string, for example HTML data or CSV data
public void DownloadFile(string data, string FileType = "application/csv", string FileName = "data.csv")
{
// headers
Response.BufferOutput = true;
Response.ClearHeaders();
// explicitly append preamble for csv files so excel recognizes utf-8 encoding
if (FileType.ContainsValue("csv"))
{
Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
}
// encoding
Response.ContentEncoding = System.Text.Encoding.UTF8;
// content type
Response.ContentType = FileType;
// content disposition
Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", FileName));
// data
Response.Write(data);
// end
Response.End();
}
Option 3 - Pass in the file path to a file that already physically exists
public void DownloadFile(string FileName, string FileType = "application/csv")
{
// make sure file exists
if (!File.Exists(FileName))
{
return;
}
// headers
Response.BufferOutput = true;
Response.ClearHeaders();
// encoding
Response.ContentEncoding = System.Text.Encoding.UTF8;
// content type
Response.ContentType = FileType;
// content disposition
Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", Path.GetFileName(FileName)));
// data
Response.WriteFile(FileName);
// end
Response.End();
}
Example usage:
// download file
base.DownloadFile(data: RawBytes, FileType: "application/pdf", FileName: "test.pdf");

0 comments: