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

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.lryc.cn/news/438879.html

相关文章:

  • Linux: virtual: qemu-kvm: top cpu usage的组成是否包含guest的使用?
  • 【03】深度学习——神经网络原理 | 多层感知机 | 前向传播和反向传播 | 多层感知机代码实现 | 回归问题、分类问题 | 多分类问题代码实现
  • MySQL行锁的实践
  • iOS 18 將在 9 月 16 日正式上線
  • css选择器有几种?选择器的优先级是怎样的?
  • 果蔬识别系统性能优化之路(四)
  • kafka之protobuf
  • BARTBERT
  • C++ 11新特性(1)
  • 彻底理解浅拷贝和深拷贝
  • Spring4-IoC2-基于注解管理bean
  • AI基础 L22 Uncertainty over Time I 时间的不确定性
  • 中小型企业网络构建
  • PXE服务
  • Docker技术深度解析与实践应用
  • 链动321模式小程序开发源码
  • java开发中间件学习记录(持续更新中~)
  • (批处理)无限弹窗cmd
  • 解决ubuntu 24.04 ibus出现卡死、高延迟问题
  • 减少脏页标记技术中处理时间的方法
  • 828华为云征文 | 华为云Flexusx与Docker技术融合,打造个性化WizNote服务
  • JavaScript事件处理和常用对象
  • Qt基础类05-尺寸类QSize
  • Vue 2中的this指向详解
  • 长业务事务的离线并发问题
  • 黑马程序员Java笔记整理(day01)
  • VMware Tools系列一:安装VMware Tools的作用
  • 使用大语言模型(LLM)修正小段乱码(Mojibake)为正常文本
  • C++ 访问限定符
  • 几种mfc140u.dll常见错误情况,以及mfc140u.dll文件修复的方法