Asp.net中下载文件方法

    /// <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文件夹下面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值