DownLoadFile - FileHandler

判断URL文件是不是在于在。

 

 

 

复制代码
public class FileHandler
    {
        public static bool DownLoadFile(string path, string fileName)
        {
            bool result = false;
            if (!string.IsNullOrEmpty(path))
            {
                if (path.StartsWith("http") || path.StartsWith("https"))
                {
                    result = InternetDownload(path, fileName);
                }
                else
                {
                    result = LocalDownload(path, fileName);
                }  
            }
            return result;
        }

        private static bool LocalDownload(string path, string fileName)
        {
            bool result = false;
            //Physical path  "D:\InvoicePDF\"
            string filePath = path + fileName;
            if (File.Exists(filePath))
            {
                result = true;
            }
            else
            {
                try
                {
                    //Relative path  "~/InvoicePDF/"
                    filePath = HttpContext.Current.Server.MapPath(filePath);
                    if (File.Exists(filePath))
                    {
                        result = true;
                    }
                }
                catch
                {
                    result = false;
                }
            }
            if (result)
            {
                try
                {
                    //string filePath = HttpContext.Current.Server.MapPath(path + fileName); 
                    FileInfo fileInfo = new FileInfo(filePath);
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.ClearContent();
                    HttpContext.Current.Response.ClearHeaders();
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
                    HttpContext.Current.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
                    HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
                    HttpContext.Current.Response.WriteFile(fileInfo.FullName);
                    HttpContext.Current.Response.Flush();
                }
                catch (Exception e)
                {
                }
                finally
                {
                    HttpContext.Current.Response.End();
                }
            }
            return result;
        }

        private static bool InternetDownload(string path, string fileName)
        {
            string url = path + fileName;
            if (UrlIsExist(url))
            {
                ResponseRedirect.Redirect(HttpContext.Current.Response, url, "_blank", "");
                //System.Web.HttpContext.Current.Response.Redirect(url,false);
            }
            return false;//Never use default behavior 
        }

        private static bool UrlIsExist(string url)
        {
            System.Uri u = null;
            try
            {
                u = new Uri(url);
            }
            catch { return false; }
            bool isExist = false;
            System.Net.HttpWebRequest r = System.Net.HttpWebRequest.Create(u) as System.Net.HttpWebRequest;
            r.Method = "HEAD"; 
            try
            {
                System.Net.HttpWebResponse s = r.GetResponse() as System.Net.HttpWebResponse;
                if (s.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    isExist = true;
                }
            }
            catch (System.Net.WebException x)
            {
                try
                {
                    isExist = ((x.Response as System.Net.HttpWebResponse).StatusCode != System.Net.HttpStatusCode.NotFound);
                }
                catch { isExist = (x.Status == System.Net.WebExceptionStatus.Success); }
            }
            return isExist;
        }  
    }
复制代码

 

posted @   VipSoft  阅读(1692)  评论(0编辑  收藏  举报
编辑推荐:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示