当前位置: 首页 > article >正文

C#使用HttpWebRequest下载文件

public static bool HttpDownloadFile(string downloadUrl, string localPath, log4net.ILog log)
        {
            bool bFlagDownloadFile = false;
            //log.Debug("HttpDownloadFile--准备以HTTP的方式下载文件,url:[" + downloadUrl + "]本地文件:【" + localPath + "】");
            
            HttpWebRequest request = null;
            HttpWebResponse resp = null;
            try
            {
                request = WebRequest.Create(downloadUrl) as HttpWebRequest;
                request.Timeout = 3000;
                //log.Info("HttpDownloadFile--新建HttpWebRequest!");

                ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(delegate { return true; });
                resp = request.GetResponse() as HttpWebResponse;
                string responseCode = string.Empty;
                //获得http响应状态
                bFlagDownloadFile = getResponseResult(resp.StatusCode, ref responseCode);

                //获得HTTP响应的接收流
                Stream ns = resp.GetResponseStream();

                FileStream fs;
                fs = new FileStream(localPath, System.IO.FileMode.Create);
                int totalFileLen = 0;  //文件最多支持2^32 = 4G

                int fileBufferSize = 1024;
                byte[] nbytes = new byte[fileBufferSize];

                int nreadsize = ns.Read(nbytes, 0, fileBufferSize);
                while (nreadsize > 0)
                {
                    fs.Write(nbytes, 0, nreadsize);

                    totalFileLen += nreadsize;
                    nreadsize = ns.Read(nbytes, 0, fileBufferSize);
                }

                fs.Close();
                ns.Close();
                bFlagDownloadFile = true;

                try
                {
                    if (resp != null)
                    {
                        resp.Close();
                        resp = null;
                    }
                }
                catch (Exception e)
                {

                }

                try
                {
                    if (request != null)
                    {
                        request.Abort();
                        request = null;
                    }
                }
                catch (Exception e)
                {

                }

                log.Debug("HttpDownloadFile--以HTTP的方式下载文件,本地文件:【" + localPath + "】成功!");
            }
            catch (Exception ex)
            {
                log.Error("HttpDownloadFile--以HTTP的方式下载文件,本地文件:【" + localPath + "】时发生错误!异常消息:" + ex.Message,ex);
                bFlagDownloadFile = false;

                try
                {
                    if (resp != null)
                    {
                        resp.Close();
                        resp = null;
                    }
                }catch(Exception e)
                {

                }

                try
                {
                    if (request != null)
                    {
                        request.Abort();
                        request = null;
                    }
                }
                catch (Exception e)
                {

                }
            }

            return bFlagDownloadFile;
        }


http://www.kler.cn/news/310733.html

相关文章:

  • Java通信协议——UDP通信协议,模拟聊天室(完整详解,附有代码)
  • android含有EditText的键盘弹出后界面的正确处理
  • 人工智能 | 基于ChatGPT开发人工智能服务平台
  • 单片机嵌入式编程中常用技术点
  • Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
  • Java在零工市场中的应用:构建灵活高效的劳动力平台
  • 【算法】局部敏感哈希(LSH):高效解决相似性搜索问题的利器
  • html页面整合vue2或vue3
  • 选择适合你企业发展的服务器
  • 【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
  • C++类和对象(4)
  • Linux平台UOS系统摄像头播放
  • 爬虫--翻页tips
  • .Net Gacutil工具(全局程序集缓存工具)使用教程
  • qt-creator-10.0.2之后版本的jom.exe构建和编译速度慢下来了
  • 【Python日志功能】二.高级配置与日志处理器
  • 怎么浏览URL的PDF文件呢
  • 性能测试笔记
  • 【Linux】网络层协议——IP
  • 跨界融合,GIS如何赋能游戏商业——以《黑神话:悟空》为例
  • flutter hive的使用
  • 万兆时代 TCP/IP如何赋能以太网飞跃
  • CentOS 中使用 OpenSSL 查看 SSL 证书详细信息
  • 利用模糊综合评价法进行数值评分计算——算法过程
  • JS 性能优化
  • Linux Kernel Makefiles 编译标志详解
  • C++在Linux实现多线程和多进程的TCP服务器和客户端通信
  • 【公告】博客正在迁移至 git pages
  • RaisePropertyChanged(() => DateName)详解记录一下
  • 前端开发之迭代器模式