首页 > 编程语言 >C# 通过地址获取文件及名称(含后缀)

C# 通过地址获取文件及名称(含后缀)

时间:2023-05-06 16:55:05浏览次数:48  
标签:string C# request contentDescriptionHeader System 后缀 地址 HttpWebRequest response

通过两种方式:

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;
        }

 

标签:string,C#,request,contentDescriptionHeader,System,后缀,地址,HttpWebRequest,response
From: https://www.cnblogs.com/wsk198726/p/17377928.html

相关文章

  • Flink Cdc MySQL 整库同步到 StarRocks
    这段时间开始调研使用StarRocks做准实时数据仓库:flinkcdc实时同步数据到StarRocks,然后在StarRocks中做分层计算,直接把StarRocks中的ADS层提供给BI查询。架构如下:由于用到的表比较多,不能用FlinkSQL给每个表都做个CDC的任务(任务太多不好维护、对数据库又可能有......
  • ICT实战系统集成-LAB9-Samba文件共享服务器管理
    ICT实战系统集成-LAB9-Samba文件共享服务器管理实验步骤1安装samba服务端安装samba、samba-common、samba-clientyuminstallsambasamba-commonsamba-client启动samba:ststemctlstartsmb.service查看samba状态2添加系统组share,添加系统账号xiaoming、hanmeimei......
  • 无法加载响应数据: No data found for resource with given identifier
    环境Ubuntu22.04IDEADocker中使用nginx问题描述之前使用正常,今天打开前端报错,postman测试正常解决由于nginx在docker中使用,upstream不能使用127.0.0.1,需要使用本机ip,而本机ip是会变的。需要更改新的本机ip......
  • ICT实战系统集成-LAB6-openEuler管理文件系统及存储
    LAB6-openEuler管理文件系统及存储1实验要求1.1添加两块scsi硬盘,大小分别为10G1.2对新添加的硬盘1(如:/dev/sdb)进行MBR分区、格式化、挂载1、使用fdisk对/dev/sdb进行分区:/dev/sdb1为主分区1大小2G、/dev/sb2为扩展分区大小8G,在/dev/sb2的基础上建立扩展分区/dev/sdb5,大小......
  • ICT实战系统集成-LAB5-OpenEuler软件管理
    系统集成-LAB5-OpenEuler软件管理1实验要求任务一:使用rpm包安装zziplib工具1、完成安装2、查询zziplib工具是否安装成功3、查询zziplib工具的文件列表和完整目录4、查询zziplib工具的详细信息5、对zziplib工具进行卸载任务二:使用yum/dnf安装java-1.8.01、完成yum/dnf源......
  • ICT实战系统集成-LAB2-openEuler 命令行基础操作入门
    ICT实战系统集成-实验02-openEuler命令行基础操作入门1思考题1.1创建一个/iamthebest目录;1.2在/iamthebest目录下创建/cat和/dog两个目录;1.3将/etc/passwd文件复制到/iamthebest目录;并查看被复制文件的操作权限;1.4尝试执行cp-i/etc/passwd.你会发现什么?为什么......
  • Java之Object类
    1、Object类概述 Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类(可以在代码中明确地写出声明要“继承Object类”,没有任何错误)。当然,数组也继承了Object类。但是,接口是不继承Object类的。接口只是是抽象类的延伸,可以将它看做是纯粹的抽象类,接口中的所有方法,......
  • 面向开发者的ChatGPT提示工程-1引言
    简介作者吴恩达教授欢迎来到本课程,我们将为开发人员介绍ChatGPT提示工程。本课程由IsaFulford教授和我一起授课。IsaFulford是OpenAI的技术团队成员,曾开发过受欢迎的ChatGPT检索插件,并且在教授人们如何在产品中使用LLM或LLM技术方面做出了很大贡献。她还参与......
  • 【SSH】SSH框架(三)——Spring IOC和AOP的容器框架
    一、前言      在上一篇博客《【SSH】SSH框架(二)——Struts2框架的简单认识》中小编向大家简单的介绍了SSH框架中的第一个S,也就是Struct2。接下来小编将会向大家分享第二个S——Spring。二、Spring是干什么用的?      其实在小编以前做过的项目中也使用过Spring,那个时候......
  • 语音感应洗手液器IC芯片设计方案
    市场前景随着问过人民生活水平的逐步提升以及近期疫情影响,公民的健康保护意识也越来越强,洗手液越来越被人们重视以及提倡,即时在受疫情影响是2021年洗手液市场规模也是上升至恐怖34亿元产值;而近年来自动感应洗手液器凭借实用性、便携性和普及型都大大提升,市场上对于洗手液器需求量......