ShowAttachmentsPage private void ShowAttachemnts() { GetQueryString(); List lstAttachemnts = new List(); lstAttachemnts = BllComplaints.getAttachmentsDetailsByAppIdAndDocId(_AppId, _DocId); if (lstAttachemnts != null && lstAttachemnts.Count > 0) { HyperLink arrLink = new HyperLink(); int i = 0; foreach (BllComplaints lst in lstAttachemnts) { arrLink = new HyperLink(); arrLink.ID = "HyperLink" + i++; arrLink.Text = lst.FileName; arrLink.NavigateUrl = "~/IFrame/Download.aspx?file=" + lst.DiskFileName; divAttachments.Controls.Add(arrLink); } } }
Download.aspx 1.Method using using using using using using using using using
System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls; System.IO; System.Threading; System.Configuration;
public partial class IFrame_Download : System.Web.UI.Page { String strAttachmentsPath = String.Empty; protected void Page_Load(object sender, EventArgs e) { strAttachmentsPath = ConfigurationManager.AppSettings["AttachmentsPath"].ToString(); string filename = Request["file"].ToString(); fileDownload(filename, strAttachmentsPath + "\\" + filename); } private void fileDownload(string fileName, string fileUrl) { Page.Response.Clear(); bool success = ResponseFile(Page.Request, Page.Response, fileName, fileUrl, 1024000); //if (!success) // Response.Write("Downloading Error!"); Page.Response.End();
} public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed) { try { FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { _Response.AddHeader("Accept-Ranges", "bytes"); _Response.Buffer = false; long fileLength = myFile.Length; long startBytes = 0; int pack = 10240; //10K bytes int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) +
1;
if (_Request.Headers["Range"] != null) { _Response.StatusCode = 206; string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' }); startBytes = Convert.ToInt64(range[1]); } _Response.AddHeader("Content-Length", (fileLength startBytes).ToString()); if (startBytes != 0) { _Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength)); } _Response.AddHeader("Connection", "Keep-Alive"); _Response.ContentType = "application/octet-stream"; _Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int)Math.Floor((double)((fileLength startBytes) / pack)) + 1; for (int i = 0; i < maxCount; i++) { if (_Response.IsClientConnected) { _Response.BinaryWrite(br.ReadBytes(pack)); Thread.Sleep(sleep); } else { i = maxCount; } } }
catch { return false; } finally { br.Close(); myFile.Close(); }
}
} catch { return false; } return true;
}
2.Method using using using using using using using using using
System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls; System.IO; System.Threading; System.Configuration;
public partial class IFrame_Download : System.Web.UI.Page { String strAttachmentsPath = String.Empty; protected void Page_Load(object sender, EventArgs e) { strAttachmentsPath = ConfigurationManager.AppSettings["AttachmentsPath"].ToString(); string filename = Request["file"].ToString(); DownloadFile(strAttachmentsPath + "\\" + filename); } private void DownloadFile(string serverFilePath) { FileInfo file = new FileInfo(serverFilePath); if (file.Exists == true) { Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); Response.AddHeader("Content-Length", file.Length.ToString()); Response.ContentType = "application/octet-stream"; Response.WriteFile(file.FullName); Response.End();
}
}
}
Restrict Browser back button
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); string strDisAbleBackButton; strDisAbleBackButton = "<script language='javascript'>\n"; strDisAbleBackButton += "window.history.forward(1);\n"; strDisAbleBackButton += "\n"; ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "clientScript", strDisAbleBackButton); }