C# 下载文件 断点续传
/// <summary>
/// 普通文件下载
/// </summary>
/// <param name="URL"></param>
/// <param name="filename"></param>
/// <returns></returns>
public static bool DownloadFile(string URL, string filename)
{
try
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream netFs = webResponse.GetResponseStream();
Stream fs = new FileStream(filename,FileMode.Create);
byte[] by = new byte[1024];
int osize = netFs.Read(by, 0, (int)by.Length);
while (osize > 0)
{
fs.Write(by, 0, osize);
osize = netFs.Read(by, 0, (int)by.Length);
}
fs.Close();
netFs.Close();
webResponse.Close();
webRequest.Abort();
return true;
}
catch (System.Exception e)
{
System.Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 断点传输
/// </summary>
/// <param name="URL"></param>
/// <param name="filename"></param>
/// <returns></returns>
public static bool DownloadFile2(string URL, string filename)
{
StringBuilder progress = new StringBuilder();
int httpStatusCode = 200;
//打开上次下载的文件或新建文件
long lStartPos = 0;
FileStream fs;
if (File.Exists(filename))//另外如果文件已经下载完毕,就不需要再断点续传了,不然请求的range 会不合法会抛出异常。
{
fs = File.OpenWrite(filename);
lStartPos = fs.Length;
fs.Seek(lStartPos, SeekOrigin.Current); //移动文件流中的当前指针
}
else
{
fs = new FileStream(filename, FileMode.Create);
lStartPos = 0;
} try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
if (lStartPos > 0)
{
request.AddRange((int)lStartPos); //设置Range值
}
WebResponse response = request.GetResponse();
//向服务器请求,获得服务器回应数据流
Stream netFs = response.GetResponseStream();
long totalSize = response.ContentLength;
Console.WriteLine($"totalsize:{totalSize / 1024 / 1024}MB"); // 从lStartPos位置开始读获得的大小 long hasDownSize = 0;
byte[] nbytes = new byte[512];//521,2048 etc
int nReadSize = 0;
nReadSize = netFs.Read(nbytes, 0, nbytes.Length);
while (nReadSize > 0)
{
progress.Clear();
fs.Write(nbytes, 0, nReadSize);
nReadSize = netFs.Read(nbytes, 0, nbytes.Length);
hasDownSize += nReadSize;
//progress.Append("("+(((double)hasDownSize * 100 / totalSize).ToString("0.00")) + " %)");
//Console.WriteLine(progress);
}
fs.Close();
netFs.Close();
return true;
}
catch (WebException ex)
{
var rsp = ex.Response as HttpWebResponse;
httpStatusCode = (int)rsp.StatusCode;
fs.Close(); if (httpStatusCode == 416) //request.AddRange((int)lStartPos) 超出范围
{
Console.WriteLine("文件均下载完成");
return true;
}
else
{
Console.WriteLine("下载过程中出现错误:" + ex.ToString());
return false;
}
}
}
使用例子:
DownloadFile2("http://localhost//file//Windows Kits.rar", "Windows Kits.rar");
C# 下载文件 断点续传的更多相关文章
- AFNetworking 下载文件断点续传操作
一:本示例代码包括: 文件下载,写入指定目录 下载进度,回调Progress; 断点续传,下载暂停,继续操作: 二:本项目 适用于 AFNetworking 1.x 版本 #pragma mark 断 ...
- 【FTP】FTP文件上传下载-支持断点续传
Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传. 在实际开发中,输入输出流用的比较少,但 ...
- 反射机制及开源框架xUitls的使用,使用HttpUtils通过断点续传下载文件
反射: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性 Java反射机制主要提供下面几种用途: 1•在运行时判断 ...
- 转:Http下载文件类 支技断点续传功能
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...
- java 多线程下载文件并实时计算下载百分比(断点续传)
多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...
- php实现大文件断点续传下载实例
php实现大文件断点续传下载实例,看完你就知道超过100M以上的大文件如何断点传输了,这个功能还是比较经典实用的,毕竟大文件上传功能经常用得到. require_once('download.clas ...
- SecureCRT上传和下载文件
SecureCRT上传和下载文件(下载默认目录) SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. ...
- HTTP文件断点续传的原理
前几天一个同事跑过来找我说,我们在广告素材视频这块想做断点续传,就是这次某个视频缓存到一半,下次不用重头开始,可以在原来停留得位置开始继续下载.以提供更好的用户体验. 同时说需要我们支持吐素材地址的业 ...
- 每天一个linux命令(26):用SecureCRT来上传和下载文件
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...
随机推荐
- 在Github上搭建个人主页
最近试着在github上搭建个人主页,没用github给的模板,用的是自己在网上找到那种类似个人主页的模板,到时候直接上传到仓库里就行了 首先先创建仓库,点击右上角的加号,选择New reposito ...
- 关于oracle中scott用户恢复到初始状态的步骤,和一些问题解决方法。
一般恢复步骤: sqlplus 连接到sys用户sqlplus / as sysdba运行脚本进行初始恢复start ?/rdbms/admin/utlsampl.sql;恢复后,用户为锁定状态,需要 ...
- 简单的自动清理TIM/QQ聊天垃圾文件方案
我平时喜欢在后台挂着Tim,时间一长,我发现数据文件夹会越来越大,即使我没有看过这些消息(多为群聊消息),为了不再惦记清理垃圾文件,我整理了以下方案,可以每天清理一次7天前的文件. 1. 在磁盘任意位 ...
- win系统airtest+pytest-xdist服务器分布式运行。
1.准备至少两台服务器,集群全部是局域网,(启动脚本的时候可以使用外网ip). 2.输出的报告地址,需要把文件夹设置成共享文件夹,(连接的时候使用内外ip). 启动脚本文件 import os, da ...
- Jenkins+Git+Gitlab+Ansible 持续集成和自动部署
- centos7下的防火墙部署
iptables以及firewalld其实都是防火墙管理工具,说白一点,就是一个服务,用来保障公网与内网 iptables 由于centos7没有自带,需要自己安装 安装 yum install ip ...
- android判断是否连接wifi跟网络状态的判断及wifi信号强度的方法
场景:android判断是否连接wifi跟网络状态的判断 android判断是否连接wifi和网络状态的判断 // 是否连接WIFI public static boolean isWifiConne ...
- DP4398 是一个立体声 24 位/192kHz 数模转换芯片-替代CS4398
DP4398 是一个立体声 24 位/192kHz 数模转换芯片.该 D/A 系统包括数字去加重.半分贝步长音量控制.ATAPI 通道混频.可选择的快速和慢速数字插补滤波器和过采样多位增量 Sigma ...
- jsp <img src="“> src 相对路径的问题
图片所在路径 jsp所在路径 调用处 相对路径 以调用处JSP位置为参考 每一个../代表上一级 4个 正好找到到webRoot 目录拼接后 webRoot /kernel/_static/img/ ...
- charles的坑
https://blog.csdn.net/qq_42191801/article/details/80288804 https://zhuanlan.zhihu.com/p/108960019 1. ...