文章介绍了通过HttpWebRequest和HttpWebResponse实现视频下载的功能;首先HttpWebRequest类利用HTTP 协议和服务器交互,再由HttpWebResponse返回来自网络资源的响应,最后由stream类处理数据流,缓存到本地磁盘;

上代码之前先上一张Demo的图片,新建一个winform窗体,添加lable控件,ProgressBar和button按钮,以下仅供参考

using System;
using System.IO;
using System.Net;
using System.Windows.Forms; namespace FileDownLoad
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
string URL = "https://media.w3.org/2010/05/sintel/trailer.mp4";//视频网络地址
string filename = @"D:\视频下载\\video.mp4";//存储视频的文件地址
DownloadFile(URL, filename, progressBar1);//调用下载方法
}
/// <summary>
/// 下载视频
/// </summary>
/// <param name="URL">请求地址</param>
/// <param name="filename">缓存的路径</param>
/// <param name="prog">进度条</param>
public void DownloadFile(string URL, string filename, ProgressBar prog)
{
try
{
float percent = ;
HttpWebRequest Myrq = (HttpWebRequest)HttpWebRequest.Create(URL);//请求网络资源
HttpWebResponse myrp = (HttpWebResponse)Myrq.GetResponse();//返回Internet资源的响应
long totalBytes = myrp.ContentLength;//获取请求返回内容的长度
if (prog != null)
{
prog.Maximum = (int)totalBytes;//获取进度条的最大值
}
Stream st = myrp.GetResponseStream();//读取服务器的响应资源,以IO流的形式进行读写
Stream so = new FileStream(filename, FileMode.Create);
long totalDownloadedByte = ;
byte[] by = new byte[];
int osize = st.Read(by, , (int)by.Length);
while (osize > )
{
totalDownloadedByte = osize + totalDownloadedByte;
Application.DoEvents();//交出CPU控制权,让系统可以处理队列中的所有Windows消息 ,防止频繁读写造成程序阻塞或界面停止响应
so.Write(by, , osize);
if (prog != null)
{
prog.Value = (int)totalDownloadedByte;
}
osize = st.Read(by, , (int)by.Length);//读取当前字节流的总长度
percent = (float)totalDownloadedByte / (float)totalBytes * ;
double perNumber = Math.Round(percent);
label1.Text = "系统更新已完成:" + perNumber.ToString() + "%";
Application.DoEvents();//此处是为了防止lable1的内容来不及显示
}
so.Flush();
so.Close();
st.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}

代码完成,实现下载功能,具体Demo请点击文末链接

点击下载  提取码:yg4g

C# 处理文件,视频,音频,压缩包下载的更多相关文章

  1. [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作

    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作 转载请注明出处 一.关于为什么用pymediainfo以及pymediainfo的安装 使用python对视频/音频文件进行详 ...

  2. Python3 根据m3u8下载视频,批量下载ts文件并且合并

    Python3 根据m3u8下载视频,批量下载ts文件并且合并 m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少 ...

  3. php-ffmpeg 操作视频/音频文件

    php-ffmpeg 是一个php操作视频/音频文件的类库. GitHub地址:https://github.com/PHP-FFMpeg/PHP-FFMpeg/ 使用composer快速安装:com ...

  4. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  5. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  6. SpringMVC 实现文件上传与下载,并配置异常页面

    目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...

  7. 多表批量导出txt及打压缩包下载

     在一些特殊的业务系统中,有些客户查看报表数据时不需要在浏览器上逐一查看,需要在页面端选择要查看的报表名称(可多选),选择条件,然后将所选中的报表批量导出到txt文件中并且要把批量导出的结果文件打 ...

  8. 支持n多视频网站的下载,推荐 you-get

    其实刚开始是想下载youtube视频, 网上找了下 其中之一:http://jingyan.baidu.com/article/39810a23d2deb2b637fda66c.html 访问一个在线 ...

  9. Http服务器实现文件上传与下载(二)

    一.引言 欢迎大家接着看我的博客,如何大家有什么想法的话回复我哦,闲话不多聊了,接着上一讲的内容来说吧,在上一节中已经讲到了请求头字符串的解析,并且在解析中我我们已经获取了url.就是上节中提到的/d ...

  10. 七、springBoot 简单优雅是实现文件上传和下载

    前言 好久没有更新spring Boot 这个项目了.最近看了一下docker 的知识,后期打算将spring boot 和docker 结合起来.刚好最近有一个上传文件的工作呢,刚好就想起这个脚手架 ...

随机推荐

  1. Word报告自动生成(例如 导出数据库结构)

    将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能.适用于导出数据库的结构(表.字段等)到Word或将体检数据自动生成Word版的体检报告等.代码:Github 一.主要需要完成功能: 1. ...

  2. JavaScript判断对象是否是NULL

    这个方法是我踩了很多坑之后找到的,对数组等类型的对象都很好使,果断收藏! function isEmpty(obj) { // 检验 undefined 和 null if (!obj &&a ...

  3. Python--day13(函数嵌套定义,global、nonlocal、闭包函数、装饰器)

    今日主要内容 1.  函数的嵌套定义 2.  global.nonlocal关键字 3.  闭包及闭包的应用场景 4. 装饰器 1.  函数的嵌套定义 概念:在一个函数的内部定义另一个函数 为什么要有 ...

  4. On the structure of submodule of finitely generated module over PID

    I was absorbed into this problem for three whole days......

  5. 播放器授权后播放内容时出现Cnario logo水印

    问题描述 Player获取License后, 通过Messeenger发布到Player的内容前面出现Cnario 的logo水印, 如下图样式: 原因 出现这种情况一般是由于License授权不正确 ...

  6. bugku web 管理员系统

    页面是一个登陆表单,需要账号密码,首先f12查看源代码,发现有一段可疑的注释,明显是base64,解码得到test123,似乎是一个类似于密码的东西,既然是管理员,就猜测用户名是admin,填上去试一 ...

  7. Gym - 101982F Rectangles (扫描线+线段树)

    链接:http://codeforces.com/gym/101982/attachments 思路: 问被覆盖次数为奇数次的矩阵的面积并 扫描线求矩阵面积并我们是上界赋为-1,下界赋为1,因为要求覆 ...

  8. reload ans current configure command

    reload ans current configure command enable_ans_license.conf enable ans license WL enable ans licens ...

  9. 拆系数FFT

    学习内容:国家集训队2016论文 - 再谈快速傅里叶变换 模板题:http://uoj.ac/problem/34 1.基本介绍 对长度为L的\(A(x),B(x)\)进行DFT,可以利用 \[ \b ...

  10. Mysql高性能笔记(一):Schema与数据类型优化

    1.数据类型 1.1.几个参考优化原则 a.  更小的通常更好 i.更小的数据类型,占用更少磁盘.内存和CPU缓存,需要的CPU周期更少 ii.如果无法确定哪个数据类型是最好的,就选择不会超过范围的最 ...