/// <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");

最新文章

  1. Apple Special Event, October 2013 (1080p)(苹果发布会)
  2. 【转载】JDBC连接各种数据库的字符串
  3. css 框架——base.css,作用是重设浏览器默认样式和提供通用原子类。自己留存
  4. Function---hdu5875(大连网选,区间连续求余)
  5. ftime() 系统时间
  6. Hive On Spark和SparkSQL
  7. SPOJ LGLOVE 7488 LCM GCD Love (区间更新,预处理出LCM(1,2,...,n))
  8. java集合类之TreeMap
  9. 《JavaScript程序设计》第2课:JS类型系统
  10. zabbix监控rds
  11. Android学习探索之App多渠道打包及动态添加修改资源属性
  12. tkinter中checkbutton多选框控件和variable用法(六)
  13. Unity 捏脸整理及基于骨骼的捏脸功能实现
  14. Java字符串中常用字符占用字节数
  15. Web前端知识点记录
  16. day051 Django创建
  17. secureCRT工具下载和安装
  18. luogu1328 [NOIp2014]生活大爆炸版石头剪刀布 (模拟)
  19. MyBatis之one2one与one2many
  20. curl命令实现上网认证登录

热门文章

  1. HJ92 在字符串中找出连续最长的数字串
  2. springcloud day01
  3. 使用 WSDL 指定的标准 SOAP 消息格式
  4. idea中怎么查找替换数据?
  5. npm i error:0909006C:PEM routines:get_name:no start line 遇到问题解决
  6. springcloud(四) - 服务治理Hystrix
  7. (python)python 3.9 安装 robotframework-ride 因为 wxPython 失败
  8. 数据库常用sql
  9. tvm中使用了xgboost库中的_fmt_metric
  10. CSS中的选择( ::selection和user-select)