[ASP.NET] 強制下載檔案
.NET 強制下載檔案的三種方式。
public class Utility
{
/// <summary>
/// 強制下載實體檔案
/// </summary>
/// <param name="WebForm">傳Page進來</param>
/// <param name="FileNameWhenUserDownload">要存檔的檔名(不用完整路徑)。</param>
/// <param name="FilePath">實體檔案完整路徑+檔名。EX:D:/Download/Files/xxx.zip</param>
/// <param name="contentType">丟空字串表示用預設:"octet-stream"。下載excel請用"vnd.xls"</param>
public void DownloadPhysicalFile(System.Web.UI.Page WebForm, string FileNameWhenUserDownload, string FilePath)
{
try
{
WebForm.Response.ClearHeaders();
WebForm.Response.Clear();
WebForm.Response.Expires = 0;
WebForm.Response.Buffer = true;
string fileName = FileNameWhenUserDownload;
if (WebForm.Request.Browser.Browser == "IE")
{
fileName = System.Web.HttpUtility.UrlPathEncode(FileNameWhenUserDownload);
}
string strContentDisposition = String.Format("{0}; filename=\"{1}\"", "attachment", fileName);
WebForm.Response.AddHeader("Content-Disposition", strContentDisposition);
WebForm.Response.ContentType = "Application/octet-stream";
WebForm.Response.BinaryWrite(System.IO.File.ReadAllBytes(FilePath));
WebForm.Response.End();
}
catch ()
{
}
}
/// <summary>
/// 強制下載實體檔案
/// </summary>
/// <param name="WebForm">傳Page進來</param>
/// <param name="FileNameWhenUserDownload">要存檔的檔名(不用完整路徑)。</param>
/// <param name="FilePath">實體檔案完整路徑+檔名。EX:D:/Download/Files/xxx.zip</param>
public void DownloadPhysicalFile2(System.Web.UI.Page WebForm, string FileNameWhenUserDownload, string FilePath)
{
try
{
System.Net.WebClient wc = new System.Net.WebClient();
byte[] a = wc.DownloadData(FilePath);
wc.Dispose();
string fileName = FileNameWhenUserDownload;
if (WebForm.Request.Browser.Browser == "IE")
{
fileName = System.Web.HttpUtility.UrlPathEncode(FileNameWhenUserDownload);
}
string strContentDisposition = String.Format("{0}; filename=\"{1}\"", "attachment", fileName);
WebForm.Response.ClearHeaders();
WebForm.Response.Clear();
WebForm.Response.Expires = 0;
WebForm.Response.Buffer = true;
WebForm.Response.AddHeader("Content-Disposition", strContentDisposition);
WebForm.Response.ContentType = "Application/octet-stream";
WebForm.Response.BinaryWrite(a);
WebForm.Response.End();
}
catch ()
{
}
}
/// <summary>
/// 強制下載實體檔案
/// </summary>
/// <param name="WebForm">傳Page進來</param>
/// <param name="FileNameWhenUserDownload">要存檔的檔名(不用完整路徑)。</param>
/// <param name="FilePath">實體檔案完整路徑+檔名。EX:D:/Download/Files/xxx.zip</param>
public void DownloadPhysicalFile3(System.Web.UI.Page WebForm, string FileNameWhenUserDownload, string FilePath)
{
try
{
FileStream MyFileStream;
long FileSize;
MyFileStream = new FileStream(FilePath, FileMode.Open);
FileSize = MyFileStream.Length;
byte[] Buffer = new byte[(int)FileSize];
MyFileStream.Read(Buffer, 0, (int)FileSize);
MyFileStream.Close();
string fileName = FileNameWhenUserDownload;
if (WebForm.Request.Browser.Browser == "IE")
{
fileName = System.Web.HttpUtility.UrlPathEncode(FileNameWhenUserDownload);
}
string strContentDisposition = String.Format("{0}; filename=\"{1}\"", "attachment", fileName);
WebForm.Response.ClearHeaders();
WebForm.Response.Clear();
WebForm.Response.Expires = 0;
WebForm.Response.Buffer = true;
WebForm.Response.AddHeader("Content-Disposition", strContentDisposition);
WebForm.Response.ContentType = "Application/octet-stream";
WebForm.Response.BinaryWrite(Buffer);
WebForm.Response.End();
}
catch ()
{
}
}
}
留言
張貼留言