/// <summary> /// 下载指定路径文件 /// </summary> /// <param name="path">文件绝对路径</param> public static void DownLoadFile(string path, string oldFileName) { System.IO.FileInfo fi = new System.IO.FileInfo(path); if (fi.Exists) { //判断文件是否正在使用 try { using (System.IO.FileStream fs = System.IO.File.Open(path, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.None)) { } } catch (Exception) { throw; } if (string.IsNullOrEmpty(oldFileName)) oldFileName = path.Substring(path.LastIndexOf("\\") + 1); string browser = System.Web.HttpContext.Current.Request.UserAgent.ToUpper(); if (browser.Contains("FIREFOX") == true) oldFileName = "\"" + oldFileName + "\""; else if (browser.Contains("MSIE")) oldFileName = ToHexString(oldFileName); else oldFileName = HttpUtility.UrlEncode(oldFileName); System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + oldFileName); System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fi.Length.ToString()); System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream;charset=gb2321"; System.Web.HttpContext.Current.Response.WriteFile(fi.FullName); System.Web.HttpContext.Current.Response.Flush(); System.Web.HttpContext.Current.Response.Close(); } else { System.Web.HttpContext.Current.Response.Write("<script>alert('源文件不存在!');</script>"); } } /// <summary> /// 为字符串中的非英文字符编码 /// </summary> /// <param name="s"></param> /// <returns></returns> public static string ToHexString(string s) { char[] chars = s.ToCharArray(); System.Text.StringBuilder builder = new System.Text.StringBuilder(); for (int index = 0; index < chars.Length; index++) { bool needToEncode = NeedToEncode(chars[index]); if (needToEncode) { string encodedString = ToHexString(chars[index]); builder.Append(encodedString); } else { builder.Append(chars[index]); } } return builder.ToString(); } /// <summary> ///指定 一个字符是否应该被编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private static bool NeedToEncode(char chr) { string reservedChars = "$-_.+!*'(),@=&"; if (chr > 127) return true; if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0) return false; return true; } /// <summary> /// 为非英文字符串编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private static string ToHexString(char chr) { System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(); byte[] encodedBytes = utf8.GetBytes(chr.ToString()); System.Text.StringBuilder builder = new System.Text.StringBuilder(); for (int index = 0; index < encodedBytes.Length; index++) { builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16)); } return builder.ToString(); }
下载方法新建一个DownLoad.aspx页面,将前台页面代码全部删除,后台添加如下代码
protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Request.QueryString["filePath"])) { Response.Clear(); string path = Server.MapPath("~/" + Request.QueryString["filePath"]); if (File.Exists(path)) { DownLoadFile(path, string.Empty); } else { MessageBox.Show("不存在要下载的文件!", this); } } }
下载使用:<a href="DownLoad.aspx?filePath=File/123.txt" href="_blank">下载</a>
123.txt在发布的网站根目录File文件夹下面