文件下载

来源:互联网 发布:美工字体下载 编辑:程序博客网 时间:2024/04/30 01:26

 /// <summary>
        /// 下载
        /// </summary>
        /// <param name="DummyPath"></param>
        /// <returns></returns>
        public bool DownLoad(string DummyPath)
        {
            string sFileName = Path.GetFileName(Server.UrlDecode(DummyPath));
            //string sFilePath = GetPhysicsPath() + "//" + sFileName;
            string sFilePath = Server.MapPath(DummyPath);//zhangxy 获取相对路径
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(sFilePath);

            if (fileInfo.Exists == true)
            {
                const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
                byte[] buffer = new byte[ChunkSize];

                Response.Clear();
                try
                {
                    System.IO.FileStream iStream = System.IO.File.OpenRead(sFilePath);
                    long dataLengthToRead = iStream.Length;//获取下载的文件总大小
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(sFileName));
                    while (dataLengthToRead > 0 && Response.IsClientConnected)
                    {
                        int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
                        Response.OutputStream.Write(buffer, 0, lengthRead);
                        Response.Flush();
                        dataLengthToRead = dataLengthToRead - lengthRead;
                    }
                    Response.Close();
                }
                catch (Exception err)
                {
                    if (err.Message.StartsWith("文件") || err.Message.StartsWith("The process"))
                    {
                        Alert("此文件正在被使用,请稍候操作!");
                    }
                    else
                    {
                        DealException(err);
                    }
                }
            }
            return fileInfo.Exists;
        }