随笔 - 83,  文章 - 6,  评论 - 20,  阅读 - 10万

通过两种方式:

HttpWebRequest 
WebClient

废话不多说,直接上代码

复制代码
        /// <summary>
        /// 通过地址获取文件及名称(含后缀)
        /// </summary>
        /// <param name="url">文件下载地址</param>
        /// <param name="stream">文件流</param>
        public static string GetFileName(string url, out Stream stream)
        {
            string fileName = string.Empty;
            stream = null;

            // 方式1 : HttpWebRequest
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.KeepAlive = false;
            request.AllowAutoRedirect = false;
            request.Timeout = 10000;
            request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.PartialContent)//返回为200或206
                {
                    var contentDescriptionHeader = response.GetResponseHeader("Content-Disposition");

                    if (!string.IsNullOrEmpty(contentDescriptionHeader))
                    {
                        System.Net.Mime.ContentDisposition contentDisposition = new System.Net.Mime.ContentDisposition(contentDescriptionHeader);
                        fileName = contentDisposition.FileName;

                        //正则表达式的方式获取
                        //fileName = System.Text.RegularExpressions.Regex.Match(contentDescriptionHeader, @"(?<=filename="")([\s\S]+)(?="")", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Value;
                    }

                    stream = response.GetResponseStream();
                }
            }

            // 方式2 :WebClient
            using (var client = new WebClient())
            {
                //client.OpenRead(url);

                var data = client.DownloadData(url);

                var contentDescriptionHeader = client.ResponseHeaders["Content-Disposition"].ToString();

                if (!string.IsNullOrEmpty(contentDescriptionHeader))
                {
                    System.Net.Mime.ContentDisposition contentDisposition = new System.Net.Mime.ContentDisposition(contentDescriptionHeader);
                    fileName = contentDisposition.FileName;

                    //正则表达式的方式获取
                    //fileName = System.Text.RegularExpressions.Regex.Match(contentDescriptionHeader, @"(?<=filename="")([\s\S]+)(?="")", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Value;
                }

                foreach (var b in data)
                {
                    stream.WriteByte(b);
                }
            }

            return fileName;
        }
复制代码

 

posted on   £冷☆月№  阅读(732)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示