.Net下载文件

  #region 下载文件
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void download_Click(object sender, EventArgs e)
        {
            try
            {
                // 获取文件在服务器的地址 
                string filePath = Path.Combine(System.Configuration.ConfigurationManager.AppSettings["人员文件"], TemplatePath.Value);

                // 判断传输地址是否为空 
                if (!File.Exists(filePath))
                {
                    this.ShowMassage("当前文件不存在或已经被删除。");
                    return;
                }

                // url为文件名时,直接获取文件名 
                string fileNames = TemplateName.Value;

                // 以字符流的方式下载文件 
                FileStream fs = new FileStream(filePath, FileMode.Open);
                byte[] bytes = new byte[(int)fs.Length];
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();
                Response.ContentType = "application/octet-stream";

                // 兼容IE
                if (Request.Browser.Browser == "IE")
                {
                    int str = fileNames.IndexOf("#");
                    if (str > -1)
                    {
                        fileNames = HttpUtility.UrlEncode(fileNames, System.Text.Encoding.UTF8);
                    }
                    else
                    {
                        fileNames = HttpUtility.UrlPathEncode(fileNames);
                    }
                }

                // 通知浏览器下载
                string headerValue = string.Format("attachment; filename=\"{0}\"", fileNames);
                Response.AddHeader("Content-Disposition", headerValue);
                Response.BinaryWrite(bytes);
                Response.Flush();
                Response.End();
            }
            catch (Exception ex)
            {
                this.ShowMassage("操作失败:" + ex.Message);
            }
        }
        #endregion

posted @   亘古不变  阅读(171)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示