看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.

client|request|web|下载

 
记得以前刚用的时候,webclient确实看着挺简单,但是实现起来,小文件是一下就下载完了.

大文件要一直下载完毕才行.

后来找了找,用 WebRequest 结合 WebResponse 可以实现 有进度提示的,下载文件..
下面是代码..是从我一个软件中提取出来的.只取关键部分说明...
=====================================================================
     if(Downloading==false) //如果无文件正在下载
     { 
      TempDown=CurrentFileName;
      if(CurrentFileName==""){TempDown=b;}
      WhichDown=1;
      System.Threading.Thread ApcThread2=new System.Threading.Thread(new System.Threading.ThreadStart(DownFile));
      ApcThread2.Start();
   
     }
     else
     {
      MessageBox.Show("对不起,当前正在下载文件.","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
     }      
##################
大概说明下,如果当前没有文件正在下载,则启动一个新线程....下载文件.. 下面是 DownFile函数的代码....
简单的地方就不做注释了.
=============================================================================
  //下载块#####################################################################################################
  private void DownFile()
  {
   if(TempDown!="")
   {
   
    if(Downloading==false) //如果无文件下载
    {
     long fb;
     this.apc_status_1.Text="正在连接到 " + TempDown;
     Downloading=true;
     try
     {
      //====尝试URL有效性,以及初始化下载界面
      WebRequest myre=WebRequest.Create(TempDown);
      WebResponse mwrite=myre.GetResponse();
      fb=mwrite.ContentLength;
      this.apc_status_1.Text="连接成功..开始下载..";
      pbar.Value=0;
      pbar.Maximum=(int)fb;
      pbar.Visible=true;
      this.ApcList.Height=156;
      //====开始下载
      WebClient wc=new WebClient();
      SaveFileDialog sf=new SaveFileDialog();
      sf.Title="请选择文件存放的位置";
      filename=CurrentFileName;
      sf.FileName=filename.Substring(filename.LastIndexOf("/")+1,filename.Length-filename.LastIndexOf("/")-1);
      sf.ShowDialog(this);
      filename=sf.FileName;
      if(filename!="")
      {
       Stream srm=wc.OpenRead(TempDown);
       StreamReader srmer=new StreamReader(srm);
       byte[] mbyte=new byte[fb];
       int allbyte=(int)mbyte.Length;
       int startbyte=0;
       while(fb>0)  //################   循环读取文件,并显示进度.....
       {
        Application.DoEvents();
        int m=srm.Read(mbyte,startbyte,allbyte);
        if(m==0){break;}
        startbyte+=m;
        allbyte-=m;
        pbar.Value+=m;
        int a1=(int)startbyte/1024;
        int a2=(int)fb/1024;
        this.apc_status_1.Text="连接成功..开始下载.." + a1.ToString() + "/" + a2.ToString() + "KB";//startbyte + "/" + fb.ToString();
       }

       FileStream fs = new FileStream(filename,FileMode.OpenOrCreate);
       fs.Write(mbyte,0,mbyte.Length);
       fs.Flush();

       srm.Close();
       srmer.Close();
       fs.Close();

       this.ApcList.Height=170;
       pbar.Visible=false;
       this.apc_status_1.Text="文件下载完毕!";
      }                     

     }
     catch(WebException exp) //如地址无效或者找不到文件
     {
      MessageBox.Show(exp.Message,"听啪啪 提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
     }
     Downloading=false;
    }
    else
    {
     MessageBox.Show("对不起,当前正在下载文件.","听啪啪 提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
   }
   else
   {
    if(WhichDown==1)
    {
     MessageBox.Show("当前并无文件播放.","听啪啪 提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    else
    {
     MessageBox.Show("请在列表中选择好想要下载的文件.","听啪啪 提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
   }
   
  }//下载块#####################################################################################################

时间: 2024-11-16 23:58:59

看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.的相关文章

《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》销售排名第4,发篇ExtJS的文章(拖放树结点)庆祝下

    <人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS>一书上架短短几天,就进入了互动网计算机类销售总排名第4的好成绩(见下图).现发篇Ext JS的技术文章庆祝下. 拖放树结点 在本文将介绍TreePanel组件非常有意思的一个功能:结点拖放.要使TreePanel组件的结点可以拖放非常简单,只需要将TreePanel类的enableDD选项参数设为true即可.当然,要想实现更复杂的功能,还需要配合其他的参数和事件. 一.结点拖放的位置 拖放结点包含了两个

ASP.NET中实现文件的保护性下载基础篇

一.文件保护性下载的需求 如果我们需要在站点上出售数字形式的商品,如电子书.数字油画等,那么如何在供授权用户正常下载的同时又阻止非授权用户非法下载您的产品呢? 通过Forms身份验证,只能使这个问题得到部分解决.本文中,我将讲解如何防止某些用户访问站点上的某些文件;即使这些文件能够被这些用户直接浏览. 解决这个问题的方法有多种,但是有些方法本身就有问题.本文中,我们将考察软件供应厂商常用的一些技术,然后再介绍一种新的解决方案.需要注意的是,这里介绍的是针对ASP.net站点的. 二.常见的文件保

ASP.NET中实现文件的保护性下载基础篇_实用技巧

一.文件保护性下载的需求 如果我们需要在站点上出售数字形式的商品,如电子书.数字油画等,那么如何在供授权用户正常下载的同时又阻止非授权用户非法下载您的产品呢? 通过Forms身份验证,只能使这个问题得到部分解决.本文中,我将讲解如何防止某些用户访问站点上的某些文件;即使这些文件能够被这些用户直接浏览. 解决这个问题的方法有多种,但是有些方法本身就有问题.本文中,我们将考察软件供应厂商常用的一些技术,然后再介绍一种新的解决方案.需要注意的是,这里介绍的是针对ASP.net站点的. 二.常见的文件保

IE下载文件提示当前安全设置不允许下载怎么办

  IE下载文件提示当前安全设置不允许下载怎么办          弹出的提示如下图: 一.首先在打开IE,工具→Internet选项→安全→自定义级别→下载→文件下载,设置为"启用". 二.以下是网吧禁止下载的设置,如果第一步无效,可以参考一下禁止的方法来解决为题,注意以下是"禁止"的设置. 1.开始→运行→输入"Gpedit.msc"→进入组策略→计算机配置→管理模板---Windows 组件→Internet Explorer→Intern

java-浏览器通过URL访问Controller,是可以下载的,项目中点击按钮不能下载?

问题描述 浏览器通过URL访问Controller,是可以下载的,项目中点击按钮不能下载? 项目前端:Angular JS,Required JS,nginx代理服务器:后台Java,Spring MVC. 现在有一个下载问题:直接通过URL访问Controller,是可以下载的,并且弹出下载框,从项目里面点击按钮下载不弹出下载框,请问这是什么原因?一般不是只要设置了Content-Type,Header,就可以了吗? 解决方案 用fiddler看下,返回了什么错误,还是干脆没有触发下载. 解决

link环境下制作的下载器,如何实现打开网页自动下载的功能?

问题描述 link环境下制作的下载器,如何实现打开网页自动下载的功能? link环境下制作的下载器,如何实现打开网页自动下载的功能? 解决方案 这个比较困难,浏览器出于安全的目的不可能允许你调用本地的程序,建议使用bho一类的插件.

link环境中制作《网盘软件》下载器程序,文件直接打开不下载可以么?

问题描述 link环境中制作<网盘软件>下载器程序,文件直接打开不下载可以么? link环境中制作<网盘软件>下载器程序,文件直接打开不下载可以么? 解决方案 要看什么类型的文件,如果是通用的文件类型,必须先下载.如果是word pdf等等,试试看flashpager等.

window cmd ftp-window cmd 窗口ftp命令如何下载文件夹啊,用mget *只能下载文件,求大神解析

问题描述 window cmd 窗口ftp命令如何下载文件夹啊,用mget *只能下载文件,求大神解析 window cmd 窗口ftp命令如何下载文件夹啊,用mget * 只能下载文件,求大神解析 解决方案 用dir列出问价,然后依次下载.建议还是写个程序. 解决方案二: 用dir列出文件,然后依次下载.建议还是写个程序. 解决方案三: 命令行估计不行,只能用工具了,或者调用filezilla等工具看是否有命令行

想用Adobe PS5,找的下载链接失效,有没有破解版下载地址提供?

问题描述 想用Adobe PS5,找的下载链接失效,有没有破解版下载地址提供? 解决方案 http://www.dxysoft.com/soft/html/22509.htmlhttp://www.imdouz.com/Adobe-PhotoShop-CS5http://hi.baidu.com/kokocar/item/86f4245ff87d8a3e95eb05d4